Skip to content

문제 4 · 네트워크(연결 요소) 개수

문제 4 [3점]

네트워크란 컴퓨터 간 연결을 의미합니다. A와 B가 직접 연결되어 있고, B와 C가 직접 연결되어 있으면 A와 C도 간접적으로 연결되어 정보 교환이 가능하며, A·B·C는 같은 네트워크에 속합니다.

컴퓨터의 개수 n과 연결 정보가 담긴 2차원 배열 computers(대칭 인접 행렬)가 매개변수로 주어질 때, 네트워크의 개수를 반환하는 함수를 작성하세요.

n: 3
computers: [[1, 1, 0],
            [1, 1, 0],
            [0, 0, 1]]
return: 2
풀이 및 해설

이 문제는 그래프에서 연결 요소connected component의 개수를 세는 문제입니다.

  • 정점 = 컴퓨터, 간선 = computers[i][j] == 1.
  • 같은 네트워크 = 서로 도달 가능한 정점들의 묶음 = 하나의 연결 요소.

예시에서 0번과 1번은 서로 연결되어 한 네트워크, 2번은 홀로 한 네트워크이므로 총 2개입니다.

방법 1 — DFS/BFS

아직 방문하지 않은 정점에서 탐색을 시작할 때마다 개수를 1 늘리고, 그 정점에서 도달 가능한 모든 정점을 방문 처리합니다. 탐색을 새로 시작한 횟수가 곧 연결 요소의 개수입니다.

방법 2 — 유니온-파인드

서로 연결된 정점을 합집합union 연산으로 묶고, 마지막에 서로 다른 대표root의 개수를 셉니다.

두 방법 모두 시간 복잡도는 정점·간선 크기에 선형입니다(유니온-파인드는 거의 상수에 가까운 역아커만 계수).

2

👉 실습(C++)에서 DFS로 확인하기

PDF