[백준] 11724번 연결요소개수
2020년 08월 17일, 12:00
연결 요소 개수
문제 설명
방향 없는 그래프가 주어졌을 때, 연결 요소 (Connected Component)의 개수를 구하는 프로그램을 작성하시오.
입력
첫째 줄에 정점의 개수 N과 간선의 개수 M이 주어진다. (1 ≤ N ≤ 1,000, 0 ≤ M ≤ N×(N-1)/2) 둘째 줄부터 M개의 줄에 간선의 양 끝점 u와 v가 주어진다. (1 ≤ u, v ≤ N, u ≠ v) 같은 간선은 한 번만 주어진다.
문제 풀이
- 해당 정점으로 부터 연결된 정점을 다 살펴봐야한다. -> 2차원 배열을 이용해서 표시.(connected배열)
- 방문된 정점이면 continue;
- 그렇지 않다면, 해당 정점으로부터 연결되어 갈 수 있는 정점을 모두 탐색. queue가 비어지는 경우 count++(그룹의 수).
const fs = require("fs");
const input = fs.readFileSync("/dev/stdin").toString().trim().split("\n");
// const input = fs.readFileSync("./stdin").toString().trim().split("\n");
const [vertexLen, edgeLen] = input[0].split(" ").map(e => +e);
const edges = input.slice(1).map(e => e.split(" ").map(el => +el));
const connected = Array(vertexLen + 1)
.fill(0)
.map(e => Array());
edges.forEach(e => {
connected[e[0]].push(e[1]);
connected[e[1]].push(e[0]);
});
const visited = Array(vertexLen + 1).fill(false);
let count = 0;
for (let i = 1; i < vertexLen + 1; i++) {
if (visited[i] === true) continue;
const queue = [i];
while (queue.length) {
const start = queue.pop();
if (visited[start] === true) continue;
visited[start] = true;
queue.push(...connected[start]);
}
count++;
}
console.log(count);