알고리즘
[백준 16953] A > B
JB_ROBOT_VISION
2020. 10. 16. 03:13
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;
}