
출처: https://www.acmicpc.net/problem/2606

- 연결된 간선끼리 이어주기
- 1번 컴퓨터를 시작으로 dfs 함수 호출
- 방문하지 않았던 컴퓨터면 해당 컴퓨터에서 dfs 호출하고 answer++
- 재귀 끝나면 최종적으로 answer값 출력
const fs = require("fs"); let input = fs.readFileSync("/dev/stdin").toString(); input = input.split("\n"); // 컴퓨터 수 const N = +input.shift(); // 연결되어 있는 컴퓨터 쌍의 수 const node_cnt = +input.shift(); // 최종 정답 let answer = 0; const graph = [...new Array(N + 1)].map(() => []); const visited = [...new Array(N + 1)].fill(0); // 1번 컴퓨터 방문처리 visited[1] = true; // 간선 이어주기 for (let i = 0; i < node_cnt; i++) { let start = Number(input[i].split(" ")[0]); let end = Number(input[i].split(" ")[1]); // 양쪽 다 이어줘야함 graph[start].push(end); graph[end].push(start); } function dfs(node) { // 해당 컴퓨터에 이어져 있는 모든 간선 확인 for (let tmp of graph[node]) { // 이어져 있는 컴퓨터가 아직 방문되지 않은 컴퓨터면, 해당 컴퓨터에서 dfs 호출 if (!visited[tmp]) { visited[tmp] = true; answer++; dfs(tmp); } } } dfs(1); // 최종 정답 출력 console.log(answer);