Skip to content

Commit

Permalink
#19 23.02.11 > 5 > 뱀과 사다리 게임
Browse files Browse the repository at this point in the history
  • Loading branch information
beurmuz committed Feb 11, 2023
1 parent ca82584 commit 53c772f
Show file tree
Hide file tree
Showing 2 changed files with 53 additions and 0 deletions.
52 changes: 52 additions & 0 deletions src/bj/gold/5/16928.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
"use strict";

/**
* 주사위를 굴리는 최소 횟수를 구하라길래 bfs로 풀어야함은 알 수 있었다.
* - 다만 10x10이래서 2차원 배열을 만들어 풀어야하는 줄 알았으나, 그냥 1차원 배열을 이용해 값을 저장해도 되는 것이었다.
* - 굳이 방문 여부를 나타내는 배열과 주사위를 굴린 횟수를 따로 저장할 필요는 없다.
* - 하나의 배열(visited)에 방문 여부와 주사위를 굴린 횟수를 함께 표현하면 된다.
* - (-1)은 아직 방문하지 않은 것이고, -1이 아닌 값이 주사위를 굴린 횟수를 의미한다.
*/
const [counts, ...inputs] = require("fs")
.readFileSync("/dev/stdin")
.toString()
.trim()
.split("\n");

const solution = (counts, inputs) => {
const [n, m] = counts.split(" ").map(Number); // n: 사다리의 수, m: 뱀의 수
const board = Array.from({ length: 101 }, (_, index) => index++);
const visited = Array.from({ length: 101 }, () => -1); // 방문 여부와 주사위 굴린 횟수를 저장할 배열 선언

for (let i = 0; i < n + m; i++) {
let [from, to] = inputs[i].split(" ").map(Number);
board[from] = to; // from 위치의 값을 to로 바꾸어준다. (해당 위치에 오면 바로 to로 가게끔 하기 위함)
}

const bfs = (board) => {
// console.log(queue);
let queue = [1]; // 첫번째 칸에서 시작하므로 1을 넣어 시작한다.
visited[1] = 0; // 방문 표시

while (queue.length) {
let now = queue.shift();

for (let dice = 1; dice <= 6; dice++) {
let next = now + dice; // 다음 칸(next)은 현재 칸(now) + 주사위에 나온 수 (dice) 이다.

if (next > 100) continue; // 100을 넘어가면 건너뛴다.

next = board[next]; // board[next] 위치에 뱀이나 사다리가 있다면, 그 곳에 있는 숫자(위치)로 next를 이용한다.
if (visited[next] === -1) {
// 아직 방문한 적이 없다면
visited[next] = visited[now] + 1; // now에서 한번 이동한 것이므로 +1을 한다. (주사위 갯수를 저장)
queue.push(next);
}
}
}
};
bfs(board);
return visited[100]; // 100번째 칸에 수가 저장된다.
};

console.log(solution(counts, inputs));
1 change: 1 addition & 0 deletions src/bj/gold/5/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,3 +7,4 @@
| 3 | 7576 | [토마토](./7576.js) | 23.01.18 | X | [23.01.19](./replay/7576.js) |
| 4 | 10026 | [적록색약](./10026.js) | 23.01.20 | O |
| 5 | 7569 | [토마토](./7569.js) | 23.01.26 ||
| 6 | 16928 | [뱀과 사다리 게임](./16928.js) | 23.02.11 | X |

0 comments on commit 53c772f

Please sign in to comment.