dukongmon

[그래프] 깊이/너비 우선 탐색(DFS/BFS)문제 1 본문

Python/Coding-test

[그래프] 깊이/너비 우선 탐색(DFS/BFS)문제 1

duiiminish 2026. 6. 7. 02:21

문제 설명
네트워크란 컴퓨터 상호 간에 정보를 교환할 수 있도록 연결된 형태를 의미합니다. 예를 들어, 컴퓨터 A와 컴퓨터 B가 직접적으로 연결되어있고, 컴퓨터 B와 컴퓨터 C가 직접적으로 연결되어 있을 때 컴퓨터 A와 컴퓨터 C도 간접적으로 연결되어 정보를 교환할 수 있습니다. 따라서 컴퓨터 A, B, C는 모두 같은 네트워크 상에 있다고 할 수 있습니다.
컴퓨터의 개수 n, 연결에 대한 정보가 담긴 2차원 배열 computers가 매개변수로 주어질 때, 네트워크의 개수를 return 하도록 solution 함수를 작성하시오.

제한사항

  • 컴퓨터의 개수 n은 1 이상 200 이하인 자연수입니다.
  • 각 컴퓨터는 0부터 n-1인 정수로 표현합니다.
  • i번 컴퓨터와 j번 컴퓨터가 연결되어 있으면 computers[i][j]를 1로 표현합니다.
  • computer[i][i]는 항상 1입니다.


오답노트

def networks (computers, v, visited) :
    network = 0
    visited[v] = True
    print(v, end=' ')
    for i in computers[v] :
        if computers[v][i] == 1 and not visited[i] :
            networks(computers, i, visited)
        if False in visited :
            network += 1
    return network

computer = 3
computers = [[1, 1, 0], [1, 1, 0], [0, 0, 1]]

visited = [False]*computer
network = 0
print("정답 : ",networks(computers,0,visited))
  • 전체 노드에 대한 연결요소 확인하는 문제니까 DFS로 접근함
  • Line 5에서 computers[v]를 인덱스로 오해함
  • network의 개수는 밖에서 세야 함. dfs는 방문 처리 역할만 수
  • 결론 : 못품

GPT 추천 답안 : DFS 버전

def solution(n, computers):
    answer = 0
    visited = [False]*n

    def dfs(node) :
        visited[node] = True

        for i in range(n) :
            if computers[node][i] == 1 and not visited[i] :
                dfs(i)

    for i in range(n) :
        if not visited[i] :
            dfs(i)
            answer += 1

    return answer

 

GPT 추천 답안 : BFS 버전

from collections import deque

def solution(n, computers):
    answer = 0
    visited = [False]*n

    for i in range(n) :
        if not visited[i] :
            queue = deque([i])
            visited[i] = True
            
            while queue :
                now = queue.popleft()
                
                for i in range(n) :
                    if computers[now][i] == 1 and not visited[i] :
                        visited[i] = True
                        queue.append(i)
            answer += 1

    return answer