Coding_Test_C++

BaekJoon 16953번: A->B(C++)

https://www.acmicpc.net/problem/16953

 

16953번: A → B

첫째 줄에 A, B (1 ≤ A < B ≤ 109)가 주어진다.

www.acmicpc.net

풀이법

1) BFS를 활용하면 풀 수 있는 문제이다.

2) visited 배열을 사용하게 되면 memory 초과가 발생할 수 있기에 사용하지 않고 문제를 풀었다.

3) 최대 값을 1000000000로 정의하고 queue에 넣을 조건을 꼼꼼하게 설정하였다.

#include <iostream>
#include <string>
#include <algorithm>
#include <vector>
#include <stack>
#include <cstring>
#include <queue>
#include <set>
using namespace std;
#define MAXNUM 1000000000

int a, b;
int ans = 0;
void bfs()
{
	queue<pair<int, int>> q;
	q.push({ a,1});
	while (!q.empty())
	{
		int now = q.front().first;
		int cnt = q.front().second;
		q.pop();
		if (now == b)
		{
			ans = cnt;
			break;
		}
		if(now*2<=b)
			q.push({ now*2,cnt + 1 });
		if (now <= MAXNUM / 10)
		{
			if (now * 10 + 1 <= b)
				q.push({ now * 10 + 1,cnt + 1 });
		}
	}
}
int main()
{
	ios::sync_with_stdio(false);
	cin.tie(0);
	cin >> a >> b;
	bfs();
	if (ans == 0)
		cout << -1;
	else
		cout << ans;
}