Search
Duplicate
🙆🏻‍♀️

뱀과 사다리 게임

주차
14
문제번호
16928
언어
티어
실버
유형
BFS
nj_Blog
nj_상태
이해도
풀이
사람
이해도 2
13 more properties

메모리

시간

1228 KB
0 ms

Code

#include <cstdio> #include <queue> using namespace std; int main() { int table[101] = {0,}; //사다리 혹은 뱀 경로를 저장할 배열 int pin[101] = {0,}; // 위치에 따른 최소 횟수를 저장할 배열 int n,m, start_pin, next_pin; queue <int> que; scanf("%d%d", &n, &m); int key, value; for (int i = 1; i < (n + m + 1); i++) { scanf("%d%d",&key,&value); table[key] = value; } que.push(1); while (1) { start_pin = que.front(); for (int i = 1; i < 7; i++) { next_pin = i + start_pin; if (table[next_pin] > 0) next_pin = table[next_pin]; if (pin[next_pin] == 0) { pin[next_pin] = pin[start_pin] + 1; que.push(next_pin); } if (next_pin >= 94 && pin[100] == 0) { printf("%d", pin[next_pin] + 1); return 0; } } que.pop(); } return 0; }
C++
복사

문제 풀이

queue 를 사용하여 풀이해보았다.

삽질

처음에는 굳이 pin 배열을 선언하지 않고
queue<pair<int, int> > q;
큐 + pair 를 사용해서 두개의 값으로 주사위를 굴린 횟수까지 큐로 핸들해보려 했다.
하지만 해당 인덱스가 이전에도 나왔던 값인지에 대한 카운트를 또 해야했기에
pin 배열로 다시 풀이하였다,,,
가장 적게 움직여서 갈 수 있는 수를 구하는 문제로 넓이우선탐색(BFS)의 특성상
가장 먼저 해당 인덱스에 저장 되는게 가장 적은 수가 된다.
그래서 도착지인 100에 주사위의 최대 수인 6을 뺀 94이상의 수가 나오면 해당 인덱스에 저장된 pin의 값 + 1을 하고 출력, 종료하였다.