[백준 3182] 한동이는 공부가 하기 싫어 with node.js

waterglasses·2021년 11월 5일
0

📌 문제

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

📌 풀이

  • 선배가 가장 많이 연결되어 있는 시작점을 찾으면 된다.
  • BFS로 모든 선배의 번호를 돌아서 cnt를 return 한다.
  • 하나하나 결과에 추가하여 가장 큰 값의 index 를 반환하면 된다

📌 코드

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

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

const getCntOfConnectedVertices = (startVertex) => {
  const visitedVertices = new Array(N + 1).fill(false);
  const queue = [startVertex];
  let cnt = 0;

  visitedVertices[startVertex] = true;

  while (queue.length) {
    const vertex = queue.shift();

    for (let nextVertex of graph[vertex]) {
      if (!visitedVertices[nextVertex]) {
        visitedVertices[nextVertex] = true;
        queue.push(nextVertex);
        cnt += 1;
      }
    }
  }

  return cnt;
};

const N = parseInt(input());
const graph = Array.from(Array(N + 1), () => Array());
for (let i = 1; i <= N; i++) {
  const numOfGuessSenior = parseInt(input());

  graph[i].push(numOfGuessSenior);
}

let cntOfSeniors = [];
for (let i = 1; i <= N; i++) {
  cntOfSeniors.push(getCntOfConnectedVertices(i));
}

let maxCntOfSenior = Math.max.apply(null, cntOfSeniors);
console.log(cntOfSeniors.findIndex((value) => value === maxCntOfSenior) + 1);
profile
매 순간 성장하는 개발자가 되려고 노력하고 있습니다.

0개의 댓글