https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AWngfZVa9XwDFAQU
무향 그래프임을 확인했고 인접 리스트를 이용하는 게 공간 복잡도가 더 낮을 것이라고 생각했다. for문을 통해 모든 노드들을 확인하며 아직 방문하지 않았을 경우 카운트를 +1 한 뒤 인접한 노드들에도 방문 처리하도록 계획했다.
T = int(input())
for tc in range(1, T+1):
N, M = map(int, input().split())
adj_list = [[] for _ in range(N + 1)]
visited = [0] * (N + 1)
ans = 0
for i in range(M):
a, b = map(int, input().split())
adj_list[a].append(b)
adj_list[b].append(a)
for node in range(1, N + 1):
if not visited[node]:
visited[node] = 1
ans += 1
stack = [node]
while stack:
now = stack.pop()
for nxt in adj_list[now]:
if not visited[nxt]:
visited[nxt] = 1
stack.append(nxt)
print('#{} {}'.format(tc, ans))
계획한대로 풀이 완료!