본문 바로가기

알고리즘

[백준] 16953번 A -> B C++ 문제풀이

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

 

16953번: A → B

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

www.acmicpc.net

문제 풀이

'정수 A를 B로 바꾸려고 한다'라고 문제에 적혀있지만, 저는 B를 A로 만드는 최단경로라고 생각했다.

B가 2로 나눠지다면 나누고, 만약 나눠지지 않으면 마지막 수가 1인지를 확인하는 이 2가지를 생각했다.

만약 A == B가 된다면 bool find = true로 만든 후 while문을 종료했다.

 

소스 코드

#include <iostream>
using namespace std;


int main() {
	int A, B;
	int cnt = 0;
	bool find = false;
	cin >> A >> B;
	while (B >= A) {
		if (A == B) {
			find = true;
			break;
		}
		else {
			if (B % 2 == 0) {
				B /= 2;
				cnt += 1;
			}
			else {
				if (B % 10 == 1) {
					B = B / 10;
					cnt += 1;
				}
				else {
					break;
				}
			}
		}
	}

	if (find == true)
		cout << cnt + 1 << '\n';
	else
		cout << "-1" << '\n';
        
}