[백준 2606 / JavaScript] 바이러스

어제보다·2024년 10월 2일

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

✅ 문제 설명

✅ 풀이 설명

  1. 연결된 간선끼리 이어주기
  2. 1번 컴퓨터를 시작으로 dfs 함수 호출
  3. 방문하지 않았던 컴퓨터면 해당 컴퓨터에서 dfs 호출하고 answer++
  4. 재귀 끝나면 최종적으로 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);
profile
똑똑해지는중...

0개의 댓글