11724 연결 요소의 개수

Kyung yup Lee·2021년 2월 4일
0

알고리즘

목록 보기
14/33

실2

계속 그래프 문제에서도 bfs 로만 푸는 문제가 나왔었는데

dfs로 풀어볼 문제가 나왔다.

해당 문제는 약간 유형이 달랐는데, 기존 문제가 평면상에서 x, y 를 이동시키는 문제였다면 이번은 노드와 관련된 그래프 문제였다.

본격적으로 그래프쪽으로 유형이 옮겨가는 느낌이다.

이 문제의 핵심은 각각의 노드가 point 하고 있는 노드를 배열에 담아주는 인접 리스트를 만들어주는 것이다.

이를 통해 모든 노드를 순회하면서 특정 노드가 깊어지는 과정을 거쳐 노드를 방문 처리해주면, 방문 처리해주지 않은 노드는 새로운 연결 요소가 된다.

이를 코드로 표현하면

N, M = map(int, input().split(" "))
graph = [list(map(int, input().split(" "))) for _ in range(M)]
visited = [False] * (N+1)
count = 0
adj = [[] for _ in range(N+1)]

for n, m in graph:
    adj[n].append(m)
    adj[m].append(n)

def solution():
    global count
    for i in range(1, N+1):
        if not visited[i]:
            visited[i] = True
            count += 1
            dfs(i)
    print(count)

def dfs(node):
    for i in adj[node]:
        if not visited[i]:
            visited[i] = True
            dfs(i)
    return

solution()
profile
성장하는 개발자

0개의 댓글