프론트 개발자를 위한 여정

모든 영역을 안내하는 개발자

Algorithm/코테준비

[DFS 문제] 그래프 탐색 / 연결 요소의 개수 찾기

ji-frontdev 2025. 3. 18. 17:04
728x90
반응형

그래프 탐색 (예상 소요 시간: 15~20분)

🔹 문제: 연결 요소의 개수 찾기

 

N개의 노드와
M개의 간선이 있는 무방향 그래프에서 연결 요소(연결된 노드 집합)의 개수를 구하시오.

 

입력 예시:

console.log(solution(6, [
    [0, 1],
    [0, 2],
    [3, 4]
]));  // 출력: 3

 

 

풀이

  1. 6개의 노드가 있고, 간선으로 연결된 노드는 아래와 같다:
    • 0-1-2 (하나의 연결 요소)
    • 3-4 (두 번째 연결 요소)
    • 5는 독립적으로 존재 (세 번째 연결 요소)
  2. 방문하지 않은 노드부터 DFS나 BFS를 시작하고, 그 노드와 연결된 모든 노드를 탐색한다.
  3. 각 연결 요소를 찾을 때마다 연결 요소 개수를 증가시킨다.

function solution(n, edges) {
    let count = 0;
    
    // 그래프 만들기
     let graph = Array.from({length:n},()=>[]);
    for(let [a, b] of edges){
        graph[a].push(b);
        graph[b].push(a);
    }

    let visited = Array.from({length:n},()=>false); // // 방문 여부 체크
    
    function dfs(node){
        visited[node] = true; // 현재 노드 방문 처리
        for(let neighbor of graph[node]){
            if(!visited[neighbor]){
                dfs(neighbor); // 연결된 노드도 DFS 탐색
            }
        }
    }

  	// 모든 노드를 탐색하면서 연결 요소 개수 찾기
    for (let i = 0; i < n; i++) {
        if (!visited[i]) {  // 아직 방문하지 않았다면
            componentCount++;  // 새로운 연결 요소 발견
            dfs(i);  // 연결 요소를 DFS로 탐색
        }
    }
    
}

console.log(solution(6, [
    [0, 1],
    [0, 2],
    [3, 4]
]));  // 출력: 3

 

 

핵심 설명

  1. 그래프 만들기:
    • 간선 리스트를 기반으로 그래프를 인접 리스트 형식으로 구성한다.
  2. DFS:
    • DFS를 시작하고, 연결된 모든 노드를 방문 처리한다.
  3. 연결 요소 세기:
    • 방문하지 않은 노드가 있으면, 그 노드부터 DFS를 시작해서 연결된 모든 노드를 방문하고, 그때마다 연결 요소의 개수를 증가시킨다.

결과

이 코드는 연결 요소의 개수를 출력한다.
예시에서 3개의 연결 요소가 있으므로 출력은 3이다.


핵심 포인트

  • 연결 요소연결된 노드들을 의미하고, DFSBFS로 연결된 모든 노드를 탐색하면서 그룹화할 수 있다.
  • 각 연결 요소를 찾을 때마다 연결 요소 개수를 증가시킨다.
728x90
반응형