[백준 17352] 여러분의 다리가 되어 드리겠습니다! with node.js

waterglasses·2021년 12월 26일
0

📌 문제

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

📌 풀이

  • graphOfIslands에 주어진 두 섬들을 모두 이어주어서 그래프를 만들어준다.
  • 선린월드에서 섬들은 N - 1개의 다리가 잇고있기 때문에 섬 번호 1에서부터 시작해서 BFS를 돌면서 방문하지 않은 섬의 번호를 가져오면 된다.

📌 코드

const fs = require('fs');
const stdin = (
  process.platform === 'linux'
    ? fs.readFileSync('/dev/stdin').toString().trim()
    : `5
1 2
2 3
4 5`
).split('\n');

const input = (() => {
  let line = 0;
  return () => stdin[line++];
})();

const getNotVisitedNumOfIsland = (startVertex) => {
  const visitedIslands = new Array(N + 1).fill(false);
  const queue = [startVertex];
  let queueCursor = 0;

  visitedIslands[startVertex] = true;

  while (queue.length > queueCursor) {
    const island = queue[queueCursor++];

    for (let nextIsland of graphOfIslands[island]) {
      if (visitedIslands[nextIsland]) continue;

      visitedIslands[nextIsland] = true;
      queue.push(nextIsland);
    }
  }

  let notVisitedNumOfIsland = visitedIslands.slice(1).findIndex((visited) => !visited) + 1;
  return notVisitedNumOfIsland;
};

const N = parseInt(input());
const graphOfIslands = Array.from(Array(N + 1), () => new Array());
for (let i = 0; i < N - 2; i++) {
  const [islandA, islandB] = input().split(' ').map(Number);
  graphOfIslands[islandA].push(islandB);
  graphOfIslands[islandB].push(islandA);
}

//// 올.. 그냥 하나만 방문시도해도 충분하네요 배워갑니다
console.log(1, getNotVisitedNumOfIsland(1));
profile
매 순간 성장하는 개발자가 되려고 노력하고 있습니다.

0개의 댓글