백준 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

  1. dfs 또는 bfs를 이용해서 풀어낼 수 있는 문제.
  2. 시간을 단축시키기 위해 시간복잡도가 O(1)인 dict()로 graph를 저장했다.
    • 다만, 이 경우 graph에서 요소를 뽑아올 때에 없는 index를 가져오려 하면 KeyError가 발생하므로 예외 처리를 해주어야 한다.
    • 위 코드에서 if c in graph: 부분이 없다면, KeyError가 발생하는데 아마도 edge없이 홀로 남아있는 vertex의 경우 에러가 발생하는 듯 하다.