문제접근![](data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACH5BAEAAAAALAAAAAABAAEAAAICRAEAOw==)
•
a에서 부터 생각을 하게 되면 그리디로 풀 수 없음
→ 어떤 값을 선택해야 최종 목적지로 갈 수 있는지 선택하기 어려움
•
b에서부터 a로 가는 것을 생각하게 되면 경우가 명확해짐
1.
2의 배수인가
2.
뒤에 1이 붙어있는가
3.
둘다 해당이 안 되는가(-1)
놓쳤던 부분![](data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACH5BAEAAAAALAAAAAABAAEAAAICRAEAOw==)
•
while문 안에서 조건과 만족하지 않는 경우 -1을 출력하는 분기도 있어야 했는데 그것이 없어서 무한루프로 시간초과 발생
코드![](data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACH5BAEAAAAALAAAAAABAAEAAAICRAEAOw==)
2016 KB
0 ms
#include <iostream>
int a,b;
void input_setting()
{
std::ios_base::sync_with_stdio(false);
std::cin.tie(0);
std::cout.tie(0);
}
void input()
{
std::cin >> a >> b;
}
void solution()
{
int answer;
answer = 0;
while (a < b)
{
if (b % 2 == 0)
b /= 2;
else if (b % 10 == 1)
b /= 10;
else
{
std::cout << "-1";
return ;
}
++answer;
}
if (a > b)
std::cout << "-1";
if (a == b)
std::cout << ++answer;
}
int main(void)
{
input_setting();
input();
solution();
return (0);
}
C++
복사