이 문제는 풀때 역순으로 생각하면 편하다.(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 |