본문 바로가기
코딩테스트 연습

[백준] 2606번 바이러스(JavaScript)

by eddypark 2024. 1. 17.

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

 

2606번: 바이러스

첫째 줄에는 컴퓨터의 수가 주어진다. 컴퓨터의 수는 100 이하인 양의 정수이고 각 컴퓨터에는 1번 부터 차례대로 번호가 매겨진다. 둘째 줄에는 네트워크 상에서 직접 연결되어 있는 컴퓨터 쌍

www.acmicpc.net

// const input = require("fs").readFileSync("/dev/stdin").toString().trim().split("\n");

function dfs(graph, startNode) {
  const visited = [];
  let needVisit = [];
  needVisit.push(startNode);

  while (needVisit.length !== 0) {
    const node = needVisit.pop();
    if (!visited.includes(node)) {
      visited.push(node);
      let nodes = graph[node];
      needVisit = [...needVisit, ...nodes.sort((a, b) => b - a)];
    }
  }
  return visited;
}

const input = require("fs")
  .readFileSync("./example.txt")
  .toString()
  .trim()
  .split("\n");

const computerCount = parseInt(input.shift());
const connectComputerCount = parseInt(input.shift());

let graph = [...Array(computerCount + 1)].map((e) => []);
for (let i = 0; i < connectComputerCount; i++) {
  const [start, end] = input[i].split(" ").map(Number);
  graph[start].push(end);
  graph[end].push(start);
}

console.log(dfs(graph, 1).length - 1);

 

노드 1부터 시작해 연결되어 있는 모든 노드를 탐색 후 노드 1을 제외한 노드를 구해야 하기 때문에 -1을 해준다.

앞으로 봐도 뒤로 봐도 bfs, dfs문제이다. 맘에 드는 거 사용하면 될듯하다.