[백준 14248] 점프 점프 with node.js

waterglasses·2021년 9월 24일
0

📌 문제링크

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

📌 풀이

  • Ai는 왼쪽으로, 오른쪽으로도 갈 수 있기 때문에 양쪽 방향으로 갈 수 있다.
  • jumpDistance를 기존 정점(stone)에 더하거나 빼서 nextStone을 queue에 추가시키면서 이동하면서 방문체크를 한다.
  • visitedStones에서 방문이 가능한(true)인 부분만 추출하여 길이를 구한다.

📌 코드

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

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

const traversalInStonesByBFS = (startStone) => {
  let queue = [startStone];
  visitedStones[startStone] = true;

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

    for (let jumpDistance of [-Ai[stone], Ai[stone]]) {
      let nextStone = stone + jumpDistance;

      if (nextStone < 0 || nextStone >= N || visitedStones[nextStone]) continue;
      visitedStones[nextStone] = true;

      queue.push(nextStone);
    }
  }
};

const N = parseInt(input());
const Ai = input().split(' ').map(Number);
const S = parseInt(input());
let visitedStones = new Array(N).fill(false);

traversalInStonesByBFS(S - 1);
console.log(visitedStones.filter((isVisited) => isVisited).length);
profile
매 순간 성장하는 개발자가 되려고 노력하고 있습니다.

0개의 댓글