13913번: 숨바꼭질 4
수빈이는 동생과 숨바꼭질을 하고 있다. 수빈이는 현재 점 N(0 ≤ N ≤ 100,000)에 있고, 동생은 점 K(0 ≤ K ≤ 100,000)에 있다. 수빈이는 걷거나 순간이동을 할 수 있다. 만약, 수빈이의 위치가 X일
www.acmicpc.net
코드
#include <iostream>
#include <queue>
#include <stack>
using namespace std;
int T[100002];
int pre[100002];
int main()
{
queue<int> Q;
int n, k;
fill(pre, pre + 100001, -1);
ios::sync_with_stdio(0);
cin.tie(0); cout.tie(0);
cin >> n >> k;
if (n >= k) {
cout << n - k << endl;
while (n >= k) cout << n-- << " ";
return 0;
}
Q.push(n);
while (!T[k]) {
int x = Q.front(); Q.pop();
for (int nxt : {x - 1, x + 1, x * 2}) {
if (nxt < 0 || nxt > 100000) continue;
if (T[nxt] > 0) continue;
T[nxt] = T[x] + 1;
pre[nxt] = x;
Q.push(nxt);
}
}
cout << T[k] << endl;
stack<int> s;
s.push(k);
while (k != n) {
s.push(pre[k]);
k = pre[k];
}
while (!s.empty()) {
cout << s.top() << " ";
s.pop();
}
}
풀이
1. BFS를 이용한 최단 경로 탐색
2. 이전 지점의 인덱스를 배열의 값으로 갖는 pre 배열을 사용하여 경로 추적
'Problem Solving' 카테고리의 다른 글
C++) 백준 2470 두 용액 (0) | 2022.08.03 |
---|---|
C++) 백준 1253 좋다 (0) | 2022.08.03 |
C++) 백준 13549 숨바꼭질3 (0) | 2022.07.21 |
C++) 백준 12869 뮤탈리스트 (0) | 2022.07.21 |
C++) 백준 12851번 숨바꼭질2 (0) | 2022.07.21 |