정다윤 풀이
const filePath = process.platform === "linux" ? "/dev/stdin" : "input.txt"; const input = require("fs") .readFileSync(filePath) .toString() .trim() .split("\n"); const node = Number(input[0]); const edge = Number(input[1]); const graph = [...new Array(node + 1)].map(() => []); const visited = [...new Array(node + 1)].fill(0); for (let i = 0; i < edge; i++) { const [start, end] = input[i + 2].split(" ").map(Number); // 양방향 그래프 graph[start].push(end); graph[end].push(start); } let answer = 0; visited[1] = 1; function dfs(start){ for(let end of graph[start]){ if(!visited[end]){ answer++ visited[end] = 1; dfs(end) } } } dfs(1) console.log(answer);
김민수 풀이
let [N, M, ...list] = require('fs').readFileSync("/dev/stdin").toString().trim().split('\n'); list = list.map(e => e.split(' ').map(Number)); N = parseInt(N); let graph = Array.from({length:N+1}, () => []); let visited = Array.from({length:N+1}, () => false); for (const [a, b] of list){ graph[a].push(b); graph[b].push(a); } let cnt = 0; function chk(list){ list.forEach(e => { if(!visited[e]){ visited[e] = true; cnt += 1; chk(graph[e]); } }) } visited[1] = true; chk(graph[1]); console.log(cnt);
하송희 풀이
const fs = require("fs"); const filePath = process.platform === "linux" ? "/dev/stdin" : "./input.txt"; let [totalNode, edgeNum, ...edges] = fs.readFileSync(filePath).toString().trim().split("\n"); let graph = new Array(+totalNode + 1).fill().map(() => []); let visited = new Array(+totalNode + 1).fill(0); let count = 0; for (i = 0; i < +edgeNum; i++) { let edge = edges[i].split(" "); let first = +edge[0]; let last = +edge[1]; graph[first].push(last); graph[last].push(first); } visited[1] = 1; const dfs = (first) => { graph[first].forEach((ele) => { if (!visited[ele]) { visited[ele] = 1; count++; dfs(ele); } }); }; dfs(1); console.log(count);