문제 : https://www.acmicpc.net/problem/16953
BFS
A에서 BFS 탐색을 진행하면 되는데, 범위가 10^9로 check 배열을 따로 만들 수 없다. 하지만, 항상 증가하는 방향으로 숫자가 변하기 때문에 사이클이 생길 수 없으므로 그냥 BFS 탐색을 진행하면 된다.
#include<iostream>
#include<queue>
using namespace std;
long long A, B;
queue<pair<long long, int>> q;
int main(void) {
ios::sync_with_stdio(false);
cin.tie(0); cout.tie(0);
cin >> A >> B;
q.push({ A, 0 });
while (!q.empty()) {
pair<long long, int> cur = q.front(); q.pop();
if (cur.first == B) {
cout << cur.second + 1 << '\n';
return 0;
}
if (cur.first * 2 <= B){
q.push({ cur.first * 2, cur.second + 1 });
}
if (cur.first * 10 + 1 <= B) {
q.push({ cur.first * 10 + 1, cur.second + 1 });
}
}
cout << -1;
return 0;
}
'Problem Solving > BOJ' 카테고리의 다른 글
[BOJ] 13549 : 숨바꼭질 3 - travelbeeee (0) | 2020.04.10 |
---|---|
[BOJ] 4485 : Obstacle Course - travelbeeee (0) | 2020.04.10 |
[BOJ] 2529 : 부등호 - travelbeeee (0) | 2020.04.10 |
[BOJ] 10868 : 최솟값 - travelbeeee (0) | 2020.04.09 |
[BOJ] 6549 : Largest Rectangle in a Histogram - travelbeeee (0) | 2020.04.09 |