| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 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 |
Tags
- node.js
- 자바스크립트
- 타입스크립트 프로그래밍
- 5427번
- 5014번
- 나이트의이동
- 1969번
- javascript
- 20365번
- 1541번
- 16953번
- 맥주마시면서걸어가기
- 2503번
- 13913번
- 백준
- 16439번
- 1926번
- 123만들기
- 토마토
- 6593번
- 정리
- 14940번
- 20300번
- 타입스크립트
- 풀이
- 7526번
- 2422번
- 17626번
- 한윤정이 이탈리아에 가서 아이스크림을 사먹는데
- 알고리즘
Archives
- Today
- Total
Sqsung DevLog
[백준] 1697번: 숨바꼭질 - Node.js (자바스크립트) 본문
1. 문제
1697번: 숨바꼭질
수빈이는 동생과 숨바꼭질을 하고 있다. 수빈이는 현재 점 N(0 ≤ N ≤ 100,000)에 있고, 동생은 점 K(0 ≤ K ≤ 100,000)에 있다. 수빈이는 걷거나 순간이동을 할 수 있다. 만약, 수빈이의 위치가 X일
www.acmicpc.net
2. 풀이
const [subin, sister] = require('fs').readFileSync('/dev/stdin').toString().trim().split(' ').map(val => +val);
const visited = Array.from({ length: 100100 }, () => false);
const bfsMoveSubin = N => {
const queue = [[N, 0]];
visited[N] = true;
while (queue.length) {
const [subinCurrent, time] = queue.shift();
if (subinCurrent === sister) return time;
[subinCurrent - 1, subinCurrent + 1, subinCurrent * 2].forEach(possibility => {
if (!visited[possibility] && possibility >= 0 && possibility <= 100000) {
visited[possibility] = true;
queue.push([possibility, time + 1]);
}
});
}
};
console.log(bfsMoveSubin(subin));
2-1. 풀이 설명
수빈이는 1초 마다 N + 1, N - 1, or N * 2 칸으로 이동할 수 있다. 문제의 핵심은 현재 수빈의 위치에서 동생의 위치까지 가기 위해서 어떤 조합으로 가야 가장 효율적인지 찾는 것이다.
BFS 탐색으로 현재 수빈의 위치를 기준으로, 각 N + 1, N - 1, or N * 2 칸을 탐색하고 동생의 위치와 일치한지 확인한다. 맞는 경우 현재까지 누적된 시간 값을 반환하고, 아니라면 다시 현재 값을 기준으로 N + 1, N - 1, or N * 2 칸을 탐색한다.
'Algorithm' 카테고리의 다른 글
| [백준] 1926번: 그림 - Node.js (자바스크립트) (0) | 2023.05.23 |
|---|---|
| [백준] 5014번: 스타트링크 - Node.js (자바스크립트) (2) | 2023.05.22 |
| [백준] 14425번: 문자열 집합 (Node.js) (0) | 2023.05.19 |
| [백준] 19583번: 싸이버개강총회 (Node.js) (0) | 2023.05.19 |
| [백준] 2644번: 촌수계산 (Node.js) (1) | 2023.05.18 |