PS
[C++] 백준 1697번: 숨바꼭질
해달e
2024. 10. 30. 10:37
dp문제인가 뭐지 했는데, BFS로 풀 수 있었다.
시작지점을 0으로 놓고, ranged-based for을 이용해서 cur-1, cur+1, cur*2를 방문하여 숫자를 하나씩 올려주었다.
#include <iostream>
#include <queue>
#define X first
#define Y second
using namespace std;
int dist[100002];
int n, k;
int main()
{
ios::sync_with_stdio(false);
cin.tie(0);
cin >> n >> k;
fill(dist, dist + 100001, -1);
dist[n] = 0;
queue<int> Q;
Q.push(n);
while(dist[k] == -1){
int cur = Q.front(); Q.pop();
for(int c : {cur-1, cur+1, 2*cur}){
if(c < 0 || c > 100000) continue;
if(dist[c] != -1) continue;
dist[c] = dist[cur] + 1;
Q.push(c);
}
}
cout << dist[k];
return 0;
}