Private 난이도 : ♥♥♥♡♡
2606번: 바이러스
첫째 줄에는 컴퓨터의 수가 주어진다. 컴퓨터의 수는 100 이하이고 각 컴퓨터에는 1번 부터 차례대로 번호가 매겨진다. 둘째 줄에는 네트워크 상에서 직접 연결되어 있는 컴퓨터 쌍의 수가 주어
www.acmicpc.net
import sys
n = int(sys.stdin.readline().strip())
m = int(sys.stdin.readline().strip())
graph = dict()
for i in range(n):
graph[i+1]=[]
for i in range(m):
a,b=map(int, sys.stdin.readline().strip().split())
graph[a].append(b)
graph[b].append(a)
print(graph)
visited = [False] * (n+1)
result = 0
def dfs(v, visited):
global result
print('dfs',v,'시작')
if visited[v] == True:
return
visited[v] = True
for i in graph[v]:
print('i',i)
if visited[i]==False:
result +=1
dfs(i, visited)
print('dfs', v, '끝')
dfs(1, visited)
print(result)
설명이 추가된 것이다. 원래 버전은 여기있다.
설명
- 첫 DFS 문제여서 좀 시간이 오래걸렸다.
- graph를 리스트로 두면 큰 수를 가진 노드에서 거꾸로 올 때 자꾸 에러가 나서 dict형으로 만들었다. 그 전에 [1,2]가 들어오면 [2,1]도 추가되도록 만들었는데 그렇게 하니까 n이 달라지고 커져서 하지않았다.
- 노드 안의 수를 그대로 쓰기 위해서 0을 사용하지 않았다. graph도 마찬가지이다.
- result 변수를 함수의 인자로 넣지 않고 싶어서 global을 사용했는데 이럴 때 쓰는게 맞는지 잘 모르겠다.
- dfs함수의 맨 처음에 탈출 조건 적는게 국룰인 것 같다.
배운 점
- visited=[]로 방문시마다 append해도 되지만 그렇게 되면 있는지 확인할 때 is in을 사용하는게 O(n)시간이 추가되어서 True,False로 확인하는 것이 낫다고 한다.
'개발 > Algorithm' 카테고리의 다른 글
[Algorithm] 백준 BOJ 2468 안전 영역 python 파이썬 그래프 실버 1 (0) | 2022.03.23 |
---|---|
[Algorithm] 백준 BOJ 1012 유기농 배추 python 파이썬 그래프 실버 2 (0) | 2022.03.23 |
[Algorithm] 백준 BOJ 2212 센서 python 파이썬 그리디 골드 5 (0) | 2022.03.18 |
[Algorithm] 백준 BOJ 1541 잃어버린 괄호 python 파이썬 그리디 실버 2 (0) | 2022.03.17 |
[Algorithm] 백준 BOJ 2930 가위바위보 python 파이썬 그리디 브론즈 2 (0) | 2022.03.11 |