10^9을 넘은 연산이 가능하기때문에 long long 변환 이 필요하다 (dfs로 넘겨줄때도 당연히 longlong형으로 해야한다 ...여기서 오류 계속🤣)
dfs를 이용하여 모든 연산을 수행하고 B보다 커질시 return한다. longlong변환은 stoll을 써야하며 안쓰려면
(*10+1) 과같이 연산을 하는것도 좋아보인다.
bfs를 이용하는것이 물론 더 빨라보이므로 bfs 로도 다시풀자.
#include<iostream>
#include<string>
using namespace std;
long long A, B;
int result=1000000000;
bool flag;
void dfs(int level, long long A, long long B) {
if (A == B) {
if (result > level+1) {
result = level+1;
flag = true;
}
return;
}
else if(A>B){
flag = false;
return;
}
for (int i = 0; i < 2; i++) {
if (flag == true) return;
if (i == 0) {
dfs(level + 1, A*2, B);
}
else {
dfs(level + 1, stoll(to_string(A)+'1'), B);
}
}
}
int main() {
cin >> A >> B;
dfs(0,A, B);
if(flag==true) cout << result;
else {
cout << -1;
}
}