※ 글쓴이는 취미로 코딩을 익혀보는 사람이라 정확하지 않은 내용을 담고 있을 수 있다 ※
이번에 볼 문제는 백준 16953번 문제인 A → B이다.
문제는 아래 링크를 확인하자.
https://www.acmicpc.net/problem/16953
16953번: A → B
첫째 줄에 A, B (1 ≤ A < B ≤ 109)가 주어진다.
www.acmicpc.net
주어진 정수의 끝에 1을 붙이는 것은 주어진 정수에 10을 곱하고 1을 더한 것과 같다는 점을 떠올린다면, 수에 가할 수 있는 조작 두 가지 모두 수가 지수적으로 증가하므로 bfs를 통해 시간 내로 문제를 간단히 해결할 수 있다.
아래는 제출한 소스코드이다.
#include <iostream>
#include <queue>
#include <vector>
using namespace std;
typedef long long ll;
ll E;
queue<pair<ll, int>> que;
int main() {
ios::sync_with_stdio(0);
cin.tie(0);
ll temp; cin >> temp >> E;
que.push({ temp,1 });
while (!que.empty()) {
ll current = que.front().first;
int idx = que.front().second;
que.pop();
if (current == E) {
cout << idx;
return 0;
}
if (2 * current <= 1000000000) que.push({ 2 * current,idx + 1 });
if (10 * current + 1 <= 1000000000) que.push({ 10 * current + 1,idx + 1 });
}
cout << -1;
}
728x90
'BOJ' 카테고리의 다른 글
[BOJ 12852 // C++] 1로 만들기 2 (0) | 2021.06.26 |
---|---|
[BOJ 20305 // C++] 피보나치와 수열과 쿼리 (0) | 2021.06.25 |
[BOJ 5000 // C++] 빵 정렬 (0) | 2021.06.23 |
[BOJ 5002 // C++] 도어맨 (0) | 2021.06.22 |
[BOJ 1111 // C++] IQ Test (0) | 2021.06.21 |