코딩테스트/문제
[백준] 16928번 뱀과 사다리 게임
스키(ski)
2022. 9. 4. 19:01
문제 내용
https://www.acmicpc.net/problem/16928
16928번: 뱀과 사다리 게임
첫째 줄에 게임판에 있는 사다리의 수 N(1 ≤ N ≤ 15)과 뱀의 수 M(1 ≤ M ≤ 15)이 주어진다. 둘째 줄부터 N개의 줄에는 사다리의 정보를 의미하는 x, y (x < y)가 주어진다. x번 칸에 도착하면, y번 칸으
www.acmicpc.net
해결 코드
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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
|
#include <iostream>
#include <queue>
using namespace std;
int ladder_snake[101]; //뱀과 사다리 저장
bool visited[101];
queue<int> q;
void Push(int n) {
if (!visited[n]) {
q.push(n);
visited[n] = true;
}
}
int BFS() {
Push(1);
int cnt = 0; //주사위 굴린 횟수
while (!q.empty()) {
int sz = q.size();
for (int i = 0; i < sz; i++) {
int a = q.front();
q.pop();
if (a == 100)
return cnt;
for (int j = 1; j <= 6; j++) {
int idx = a + j;
if (idx <= 100) {
if (ladder_snake[idx]) {
Push(ladder_snake[idx]);
visited[idx] = true;
} else {
Push(idx);
}
}
}
}
cnt++;
}
}
int main() {
int n, m;
cin >> n >> m;
for (int i = 0; i < n + m; i++) {
int a, b;
cin >> a >> b;
ladder_snake[a] = b;
}
cout << BFS();
}
|
cs |
주요 개념
- 그래프 탐색: 너비 우선 탐색(Breadth-First Search,BFS)
주의 사항
- 문제를 보면 DP를 사용할것 같은 문제인데, 해당 문제는 단방향으로 향하는 문제가 아니기에 DP를 사용하면 안된다.
- [모든 칸은 최대 하나의 사다리 또는 뱀을 가지고 있으며, 동시에 두 가지를 모두 가지고 있는 경우는 없다.]라는 조건에 유의해서 풀어야한다.