| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | ||||
| 4 | 5 | 6 | 7 | 8 | 9 | 10 |
| 11 | 12 | 13 | 14 | 15 | 16 | 17 |
| 18 | 19 | 20 | 21 | 22 | 23 | 24 |
| 25 | 26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 맥주마시면서걸어가기
- 16953번
- 토마토
- 타입스크립트
- 한윤정이 이탈리아에 가서 아이스크림을 사먹는데
- 6593번
- 20300번
- 알고리즘
- 2422번
- 7526번
- 14940번
- 123만들기
- 1541번
- 2503번
- 타입스크립트 프로그래밍
- 1926번
- 나이트의이동
- 1969번
- 백준
- 자바스크립트
- javascript
- 5427번
- 17626번
- 5014번
- 16439번
- 정리
- 13913번
- 풀이
- 20365번
- node.js
Archives
- Today
- Total
Sqsung DevLog
[백준] 5014번: 스타트링크 - Node.js (자바스크립트) 본문
1. 문제 ㅡ 5014번: 스타트링크 (난이도: Silver I)
5014번: 스타트링크
첫째 줄에 F, S, G, U, D가 주어진다. (1 ≤ S, G ≤ F ≤ 1000000, 0 ≤ U, D ≤ 1000000) 건물은 1층부터 시작하고, 가장 높은 층은 F층이다.
www.acmicpc.net
2. 풀이 ㅡ Node.js (자바스크립트)
const [
buildingHeight,
kangho,
startlink,
up,
down
] = require('fs').readFileSync('/dev/stdin').toString().trim().split(' ').map(val => +val);
const visited = Array.from({ length: buildingHeight }, () => false);
const bfsElevator = N => {
const queue = [[N, 0]];
visited[N] = true;
while (queue.length) {
const [kanghoCurrent, elevator] = queue.shift();
if (kanghoCurrent === startlink) return elevator;
[kanghoCurrent + up, kanghoCurrent - down].forEach(floor => {
if (visited[floor] || floor < 1 || floor > buildingHeight) return;
visited[floor] = true;
queue.push([floor, elevator + 1]);
});
}
return 'use the stairs';
};
console.log(bfsElevator(kangho));
2-1. 풀이 설명
데이터를 이진트리로 시각화하면 문제에 접근하기 훨씬 편해진다. 현재 강호의 위치를 기준으로 위 아래로 이동한 경우의 수 2개, 즉 강호가 이동하는 층 수 별로 두 개의 노드가 있다.

강호가 시작한 층에서 시작해서 각 Up/Down일 때를 확인하고, 만약 스타트링크가 위치한 층 수와 같다면 현재까지 누적된 엘레베이터 클릭 수(elevator)를 반환한다.
만약 큐에 들어있는 값이 없어서 while문이 종료되었다면, 강호가 타고있는 기괴한 엘레베이터로는 스타트링크까지 갈 수 없는 것이라 판단하여 'use the stairs'를 반환했다.
2-2. 회고
- 이번 문제를 풀기 전에 1697번: 숨바꼭질을 풀었는데, 두 문제가 유사하기도 하고 이번 문제가 더 쉬워서 풀이 하는 과정이 수월했다.
- 그럼에도 한번 틀렸는데, while문의 early return 조건 중 한나로 floor < 0 사용했기 때문. (0층 같은 건 없다...ㅎ)
'Algorithm' 카테고리의 다른 글
| [백준] 7562번: 나이트의 이동 - Node.js (자바스크립트) (2) | 2023.05.23 |
|---|---|
| [백준] 1926번: 그림 - Node.js (자바스크립트) (0) | 2023.05.23 |
| [백준] 1697번: 숨바꼭질 - Node.js (자바스크립트) (0) | 2023.05.22 |
| [백준] 14425번: 문자열 집합 (Node.js) (0) | 2023.05.19 |
| [백준] 19583번: 싸이버개강총회 (Node.js) (0) | 2023.05.19 |