[백준 1697] 숨바꼭질 with node.js

waterglasses·2021년 9월 29일
0

📌 문제링크

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

📌 풀이

  • 수빈이가 있는 위치에서 탐색을 시작해서 동생이 있는 위치(K)에 도달하였을 때 while문을 중단한다.
  • 그때의 시간을 구하면 된다.

📌 코드

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

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

const getLeastTimeToFindSister = (startNum) => {
  const visitedVertices = new Array(N + 1).fill(false);
  const leastTimeToFindSister = [];
  const queue = [startNum];
  let queueCursor = 0;

  leastTimeToFindSister[startNum] = 0;
  visitedVertices[startNum] = true;

  while (queue.length > queueCursor) {
    let vertex = queue[queueCursor++];

    if (vertex === K) break;

    const calcVertex = [vertex - 1, vertex + 1, vertex * 2];
    for (let i = 0; i < 3; i++) {
      let nextVertex = calcVertex[i];

      if (nextVertex < 0 || nextVertex > 100000 || visitedVertices[nextVertex]) continue;
      visitedVertices[nextVertex] = true;

      leastTimeToFindSister[nextVertex] = leastTimeToFindSister[vertex] + 1;
      queue.push(nextVertex);
    }
  }

  return leastTimeToFindSister[K];
};

const [N, K] = input().split(' ').map(Number);
console.log(getLeastTimeToFindSister(N));
profile
매 순간 성장하는 개발자가 되려고 노력하고 있습니다.

0개의 댓글