[python] 깊이/너비 우선 탐색(DFS/BFS) > 네트워크

이희진·2022년 12월 5일
0

문제
이 문제는 네트 워크 상 컴퓨터끼리의 서로 연결 유무를 나타낸 lists 가 있을 때,
네트워크 덩어리가 몇 개인지 구하는 문제이다.

처음에는 감을 못 잡았지만, 천천히 고민하며 한 노드와 연결된 모든 노드를 재귀적으로 찾도록 dfs 방식을 활용하고, 다 찾은 경우에 개수를 +1 해주도록 작성했다.

여기서 visited가 필요한 이유는,
탐색 중에 걸리는 모든 노드는 재귀적으로 연결된 모든 노드를 확인하기 때문에
한번 본 노드는 볼 필요 없으므로 체크하기 위함이다.

아래는 solution이며 블로그를 참고하여 풀었다.

def dfs(start, n, computers, visited):
    visited[start] = True
    for node in range(0, n):
        if visited[node] == False and computers[start][node] == 1:
            visited = dfs(node, n, computers, visited)
    return visited

def solution(n, computers):
    answer = 0
    visited = [False] * n
    for i in range(n):
        if visited[i] == False:
            dfs(i, n, computers, visited)
            answer += 1
    return answer

0개의 댓글