[백준 1058] 친구 with node.js

waterglasses·2021년 11월 6일
0

📌 문제

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

📌 풀이

  • 친구의 친구까지 깊이가 2인 친구면 break를 해주고 친구면 true 친구의 count를 늘려준다.
  • 사람의 수만큼 반복하면서 maxCntOfFriends를 update를 해준다.

📌 코드

const fs = require('fs');
const stdin = (
  process.platform === 'linux'
    ? fs.readFileSync('/dev/stdin').toString().trim()
    : `3
NYY
YNY
YYN`
).split('\n');

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

const getCntOfFriends = (startVertex) => {
  const visitedVertices = new Array(N + 1).fill(false);
  const queue = [[startVertex, 0]];
  let queueCursor = 0;
  let cntOfFriends = 0;

  visitedVertices[startVertex] = true;

  while (queue.length > queueCursor) {
    const [vertex, depth] = queue[queueCursor++];

    if (depth === 2) break;

    for (let i = 0; i < N; i++) {
      if (friendshipGraph[vertex][i] === 'Y' && !visitedVertices[i]) {
        visitedVertices[i] = true;
        cntOfFriends += 1;
        queue.push([i, depth + 1]);
      }
    }
  }

  return cntOfFriends;
};

const N = parseInt(input());
const friendshipGraph = Array.from(Array(N), () => input().split(''));

let maxCntOfFriends = 0;
for (let i = 0; i < N; i++) {
  maxCntOfFriends = Math.max(maxCntOfFriends, getCntOfFriends(i));
}

console.log(maxCntOfFriends);
profile
매 순간 성장하는 개발자가 되려고 노력하고 있습니다.

0개의 댓글