※ 글쓴이는 취미로 코딩을 익혀보는 사람이라 정확하지 않은 내용을 담고 있을 수 있다 ※

 

이번에 볼 문제는 백준 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

+ Recent posts