Notice
Recent Posts
Link
정화 코딩
[C++] 뱀과 사다리 게임 (백준 16928번) 본문
https://www.acmicpc.net/problem/16928
#include <iostream>
#include <queue>
using namespace std;
int main() {
ios_base::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
int move[111];
for (int i = 0; i < 111; i++) move[i] = i;
int n, m;
cin >> n >> m;
for (int i = 0; i < n + m; i++) {
int a, b;
cin >> a >> b;
move[a] = b;
}
bool vst[111] = {};
vst[0] = true;
queue<pair<int, int>> q; // <position, time>
q.emplace(1, 0);
vst[1] = true;
while (1) {
int pos = q.front().first;
int t = q.front().second;
q.pop();
if (pos == 100) {
cout << t << '\n';
break;
}
for (int i = 1; i < 7; i++) {
if (move[pos + i] <= 100 && vst[pos + i] == false) {
q.emplace(move[pos + i], t + 1);
vst[pos + i] = true;
}
}
}
}
이런 문제를 보고 아직도 너비 우선 탐색이 바로 떠오르지 않는 나는.. 바보일까.. move라는 배열에 1부터 100까지 쭉 담아놓고 뱀/사다리가 연결되어 있는 칸은 최종적으로 도착하는 칸의 수로 바꿔준다. 이제 만약 n 칸에 도착하면 move[n] 칸으로 간다고 생각하면 된다.
그리고 bfs를 진행하는데, 큐는 현재 칸 위치와 시간을 둘 다 포함하도록 했다. 그래서 최종으로 이동하는 칸이 100 이하이고 아직 방문 안 한 칸이면 큐에 넣어주도록 했다.
move와 vst의 크기를 111으로 한 이유는 최종으로 이동하는 칸이 100 이하인지 확인할 때 move[pos + i]로 확인하니 +6까지 여유있게 포함할 수 있도록 넉넉하게 잡았다. (AC)
'PS' 카테고리의 다른 글
[C++] Four Squares (백준 17626번) (0) | 2024.09.12 |
---|---|
[C++] 대회 장소 준비 (백준 9555번) (0) | 2024.09.09 |
[C++] 카드 놓기 (백준 18115번) (0) | 2024.09.09 |
[C++] 테트로미노 (백준 14500번) (0) | 2024.09.08 |
[C++] 공통 순열 (백준 1622번) (0) | 2024.09.08 |
Comments