본문 바로가기
Algorithm/문제풀이

[백준] 5014번 : 스타트링크 (골드Ⅴ) by node.js

by 썸머워즈 2022. 7. 6.
반응형

▷ 문제 : 5014번 - 스타트링크

 

5014번: 스타트링크

첫째 줄에 F, S, G, U, D가 주어진다. (1 ≤ S, G ≤ F ≤ 1000000, 0 ≤ U, D ≤ 1000000) 건물은 1층부터 시작하고, 가장 높은 층은 F층이다.

www.acmicpc.net

▷ 해결 날짜 : 2022.07.06
▷ 소요 시간 : 25분
▷ 풀이 과정 :

문제를 요약하면 아래와 같다.

F, S, G, U, D 이렇게 다섯 개가 주어지고 범위는 (1 ≤ S, G ≤ F ≤ 1000000, 0 ≤ U, D ≤ 1000000)
건물은 1층부터 시작하고, 가장 높은 층은 F층이다.
현재 위치는 S이며, U버튼을 눌러서 위로, D 버튼을 눌러 아래로 갈 수 있다.
그렇게 해서 G층에 도달할 때 버튼을 몇 번 눌러서 도달했는지 반환해라.

단, G층에 갈 수 없다면 "use the stairs"를 출력한다.

문제를 요약해서 보니까 문제 자체가 매우 쉬워 보이는데, 사실 처음에 이해가 안 가서 뭔 소리인가 싶었다.

저 문제를 기반으로 풀기만 하면 되는데, 막상 구현을 하다 보니까 이전에 풀었던 문제와 비슷한 유형의 문제였다.

 

범위가 정해져 있으니 계속해서 카운팅을 해주면서 체크만 해주면 문제는 쉽게 해결할 수 있다.

 

▷ 구현

let fs = require("fs");
let input = fs.readFileSync("./dev/stdin").toString().split("\n");

const [F, S, G, U, D] = input[0].split(" ").map(Number);

const getBtnCountMinimum = (top, start, end, up, down) => {
  const visited = Array(1000001).fill(0);
  const queue = [[start, 0]];
  while (queue.length) {
    const [floor, count] = queue.shift();
    if (visited[floor]) continue;
    if (floor === end) return count;
    for (const stairs of [floor + up, floor - down]) {
      stairs >= 1 &&
        stairs <= top &&
        !visited[floor] &&
        queue.push([stairs, count + 1]);
    }
    visited[floor] = 1;
  }
  return "use the stairs";
};

console.log(getBtnCountMinimum(F, S, G, U, D));

 

▷ 복기 :

골드 난이도를 이렇게 빠르게 풀어낼 줄은 몰랐는데, 문제가 익숙해서 그랬겠지 싶다.

반응형


댓글

TOP