백준 5014 JS 풀이

hun2__2·2023년 8월 14일
0

코딩테스트

목록 보기
44/48

구하는 값

원하는 층까지 이동하는데 걸리는 횟수

핵심 아이디어

  1. F+1길이의 arr를 만들어서 각 자리에 몇번째에 방문했는지 기록 초기값은 -1로 해서 방문하지 않았으면 -1 그대로임
  2. bfs를 통해 시작점에서부터 +U, -D 두가지 경우로 다음 층으로 이동
  3. arr[g]가 -1이면 방문하지 못한거고 아니면 arr[g]에 몇번째 방문인지 기록되어있을테니 출력

코드

const input = require('fs').readFileSync('dev/stdin').toString().trim().split('\n')

class Que {
    q = [];
    h = 0;
    t = 0;
    enque(v) {
        this.q[this.t++] = v;
    }
    deque() {
        const v = this.q[this.h];
        delete this.q[this.h++];
        return v;
    }
    size() {
        return this.t - this.h;
    }
}

const [f, s, g, u, d] = input[0].split(" ").map(Number);
const visited = new Array(f + 1).fill(-1);
const que = new Que();
que.enque(s);
visited[s] = 0;

while (que.size()) {
    const cur = que.deque();

    for (const action of [u, d]) {
        const next = action === u ? cur + u : cur - d;

        if (next < 1 || next > f) continue;
        if (visited[next] === -1) {
            que.enque(next);
            visited[next] = visited[cur] + 1;
        }
    }
}

console.log(visited[g] < 0 ? "use the stairs" : visited[g]);
profile
과정을 적는 곳

0개의 댓글