일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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
- 6593번
- 한윤정이 이탈리아에 가서 아이스크림을 사먹는데
- 13913번
- node.js
- 20300번
- 자바스크립트
- 20365번
- 토마토
- 맥주마시면서걸어가기
- 타입스크립트 프로그래밍
- 정리
- 14940번
- 1926번
- 타입스크립트
- 16439번
- 16953번
- 1969번
- javascript
- 2422번
- 2503번
- 백준
- 나이트의이동
- 5427번
- 알고리즘
- 7526번
- 1541번
- 5014번
- 17626번
- 풀이
- 123만들기
Archives
- Today
- Total
Sqsung DevLog
[백준] 13549번: 숨바꼭질 3 - Node.js (자바스크립트) 본문
1. 문제 ㅡ 13549번: 숨바꼭질 3 (난이도: Gold V)
13549번: 숨바꼭질 3
수빈이는 동생과 숨바꼭질을 하고 있다. 수빈이는 현재 점 N(0 ≤ N ≤ 100,000)에 있고, 동생은 점 K(0 ≤ K ≤ 100,000)에 있다. 수빈이는 걷거나 순간이동을 할 수 있다. 만약, 수빈이의 위치가 X일
www.acmicpc.net
2. 풀이 ㅡ Node.js (자바스크립트)
const [subin, sister] = require('fs').readFileSync('/dev/stdin').toString().trim().split(' ').map(val => +val);
const visited = Array.from({ length: 100001 }, () => false);
// 수빈의 현재 위치(N)을 기준으로 BFS 탐색
const moveSubin = N => {
const queue = [[N, 0]];
visited[N] = true;
while (queue.length) {
const [current, time] = queue.shift();
if (current === sister) return time;
// 이동 가능한 경로: 위치 + 1, 위치 - 1, or 위치 * 2
[current - 1, current + 1, current * 2].forEach(move => {
if (visited[move] || move < 0 || move > 100001) return;
visited[move] = true;
// 위치 * 2, 즉 순간이동한 경우 시간이 증가하지 않으므로 time + 1 해주지 않음
// 순간이동 한 경우를 먼저 확인해야 하기 때문에 unshift 사용해서 queue 앞으로 넣어줌
if (move !== current * 2) queue.push([move, time + 1]);
else queue.unshift([move, time]);
});
}
};
console.log(moveSubin(subin));
2-1. 풀이 설명
기존에 풀어봤던 숨바꼭질 문제의 응용 버전이다. 문제의 핵심은 순간이동(위치 * 2) 할 때는 시간이 증가하지 않는다는 점이다. 즉, 수빈의 다음 위치(move)를 확인하는 과정에 우선순위가 고려되어야 한다.
우선순위를 반영하기 위해 데크 자료구조를 사용했다. 만약 수빈이 이동할 수 있는 거리가 순간이동한 거리라면 queue의 가장 앞으로 넣기 위해 unshift 메서드를 사용했고, 순간이동 시 시간이 지나지 않으므로 time + 1 대신 그냥 현재 time 정보를 그대로 다시 넣어줬다. 반대로 순간이동이 아니라 앞뒤로 한 칸 이동한 경우에는 time + 1을 해준 후 queue에 push 해주었다.
2-2. 회고
- 첫 골드 레벨 문제 풀이 완료!
'Algorithm' 카테고리의 다른 글
[백준] 6593번: 상범 빌딩 - Node.js (자바스크립트) (0) | 2023.05.25 |
---|---|
[백준] 13913번: 숨바꼭질 4 - Node.js (자바스크립트) (1) | 2023.05.24 |
[백준] 7562번: 나이트의 이동 - Node.js (자바스크립트) (2) | 2023.05.23 |
[백준] 1926번: 그림 - Node.js (자바스크립트) (0) | 2023.05.23 |
[백준] 5014번: 스타트링크 - Node.js (자바스크립트) (2) | 2023.05.22 |