이번 문제는 BFS 알고리즘을 활용하여 푸는 문제였다.
DFS & BFS
BFS에 대한 설명은 이 글로 대신한다.
#include <iostream>
#include <queue>
#include <algorithm>
#define MAX 100001
using namespace std;
int start, destination;
bool visited[MAX]={0};
void Input(){
cin>>start>>destination;
}
void BFS(int cur, int destination){
queue<pair<int, int>> q;
q.push(make_pair(cur, 0));
visited[cur]=true;
while(!q.empty()){
int path=q.front().first;
int time=q.front().second;
q.pop();
if(path==destination)
cout<<time<<endl;
if(path+1<MAX&&!visited[path+1]){
visited[path+1]=true;
q.push(make_pair(path+1, time+1));
}
if(path-1>=0&&!visited[path-1]){
visited[path-1]=true;
q.push(make_pair(path-1, time+1));
}
if(path*2<MAX&&!visited[path*2]){
visited[path*2]=true;
q.push(make_pair(path*2, time+1));
}
}
}
int main(){
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
Input();
BFS(start, destination);
return 0;
}