본문 바로가기

알고리즘

[백준 16953] A > B

www.acmicpc.net/problem/16953

 

16953번: A → B

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

www.acmicpc.net

이 문제는 풀때 역순으로 생각하면 편하다.(B부터 시작해서 A로 맞춰 질 수 있는지) 

1. 2로 나눌 수 있는지?

2. 2로 못나누면 끝자리가 1인지?

 

1이나 2를 수행 했을때 

A보다 작아지면 2가지 규칙으로 표현할 수 없는 수이므로 -1 Return

같아지면 여태까지 한 연산 횟 수 리턴 시작과 끝까지 포함한 것임으로 +1

 

코드는 다음과 같다.

 

// A > B
#include <iostream>

using namespace std;

int A2B(int A, int B, int nCnt)
{
	if(B == A)
		return (nCnt + 1);
	else if(B < A)
		return -1;
	else
	{
		if(B%2 == 0)
		{
			int Tmp = B/2;
			return A2B(A, Tmp, (nCnt + 1));
		}
		else
		{	
			int Tmp = 0;
			if(B%10 == 1)
			{
				Tmp = B/10;
				return A2B(A, Tmp, (nCnt + 1));
			}
			else 
				return -1;
		} 	
	}
}
int main(void)
{
	int A = 0, B = 0;
	int nAns = 0;

	cin >> A >> B;

	nAns = A2B(A, B, 0);

	cout << nAns << endl;

	return 0;
}

 

'알고리즘' 카테고리의 다른 글

[백준 19598] 최소 회의실 개수  (1) 2020.11.01
[백준 4848] 집합 숫자 표기법  (0) 2020.11.01
[백준 11729] 하노이 탑 이동 순서  (0) 2020.10.15
[백준 2979] 트럭 주차  (0) 2020.10.14
[백준 16504] 종이접기  (0) 2020.10.14