백준 11724번 바로가기
나의 풀이#
from collections import deque
import sys
# 입력
n, m = map(int,sys.stdin.readline().split())
graph = dict()
visited = [False] * (n+1)
count = 0
for _ in range(m):
u, v = map(int,sys.stdin.readline().split())
if u in graph:
graph[u].append(v)
else:
graph[u] = [v]
if v in graph:
graph[v].append(u)
else:
graph[v] = [u]
# 처리
def dfs(graph, queue):
while queue:
c = int(queue.pop())
if visited[c] == False:
visited[c] = True
if c in graph:
queue += deque(graph[c])
for i in range(1, n+1):
if visited[i] == False:
dfs(graph, deque([i]))
count += 1
print(count)
CODE REVIEW#
- dfs 또는 bfs를 이용해서 풀어낼 수 있는 문제.
- 시간을 단축시키기 위해 시간복잡도가 O(1)인 dict()로 graph를 저장했다.
- 다만, 이 경우 graph에서 요소를 뽑아올 때에 없는 index를 가져오려 하면
KeyError
가 발생하므로 예외 처리를 해주어야 한다.
- 위 코드에서
if c in graph:
부분이 없다면, KeyError가 발생하는데 아마도 edge없이 홀로 남아있는 vertex의 경우 에러가 발생하는 듯 하다.