Baekjoon Review
[Gold 5] 13549 숨바꼭질 3
hanseongbugi
2024. 9. 1. 17:41
https://www.acmicpc.net/problem/13549
이 문제는 BFS를 통해 해결할 수 있다.
BFS를 통해 N에서 K까지 가는 경로 중 최소 값을 구해 출력하는 것이 전부인 문제다.
이때 방문 표시는 이동 후 다음 경로를 탐색하기 전 표시해야한다는 것이다.
이유는 탐색할 수 있는 경로는 총 3가지인데 이동 전 표시하게 되면, 3가지의 경로를 모두 이동해볼 수 없기 때문이다.
#include <iostream>
#include <queue>
using namespace std;
int N, K;
int answer = 987654321;
bool visited[100001];
void bfs(){
queue<pair<int,int>>q;
q.push({N,0});
while(!q.empty()){
int now = q.front().first;
int time = q.front().second;
q.pop();
visited[now] = true;
if(now == K){
answer = min(answer, time);
}
if(now + 1 <= 100000 && !visited[now + 1]){
q.push({now + 1, time + 1});
}
if(now - 1 >= 0 && !visited[now - 1]){
q.push({now - 1, time + 1});
}
if(now * 2 <= 100000 && !visited[now * 2]){
q.push({now * 2, time});
}
}
}
int main(){
ios::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
cin>>N>>K;
bfs();
cout<<answer;
}