반응형
https://www.acmicpc.net/problem/13549
문제 해결 알고리즘
0-1 BFS 문제이다.
2배로 가는 경우도 있으므로 최대가 100000이지만 200000으로 넉넉히 잡아주어야한다.
소스 코드
#include <bits/stdc++.h>
using namespace std;
const int MAX = 200000;
int N, K;
int cnt[MAX+1];
bool isIn(int x){
return 0<=x && x<=MAX;
}
void bfs(){
deque<int> dq;
dq.push_back(N);
cnt[N] = 0;
while(!dq.empty()){
int cur_num = dq.front();
dq.pop_front();
if(cur_num == K) {
cout << cnt[cur_num];
return;
}
if(isIn(2 * cur_num) && cnt[cur_num] < cnt[cur_num * 2]){
cnt[cur_num * 2] = cnt[cur_num];
dq.push_front(2 * cur_num);
}
if(isIn(cur_num + 1) && cnt[cur_num] + 1 < cnt[cur_num + 1]){
cnt[cur_num + 1] = cnt[cur_num] + 1;
dq.push_back(cur_num + 1);
}
if(isIn(cur_num - 1) && cnt[cur_num] + 1 < cnt[cur_num - 1]){
cnt[cur_num - 1] = cnt[cur_num] + 1;
dq.push_back(cur_num - 1);
}
}
}
int main(){
cin >> N >> K;
fill(cnt, cnt+MAX+1, INT_MAX);
if(N != K) bfs();
else cout << 0;
}
반응형
'알고리즘 문제 해결 > BOJ' 카테고리의 다른 글
[그리디] BOJ 12931 두 배 더하기 (C++) (0) | 2022.10.20 |
---|---|
[0-1 BFS] BOJ 1261 알고스팟 (C++) (0) | 2022.10.17 |
[우선순위 큐] BOJ 7662 이중 우선순위 큐 (C++) (0) | 2022.10.11 |
[백트래킹] BOJ 1062 가르침 (C++) (0) | 2022.10.08 |
[DP] BOJ 7579 앱 (C++) (0) | 2022.10.05 |