정수 A를 B로 바꾸려고 한다. 가능한 연산은 다음과 같은 두 가지이다.
A를 B로 바꾸는데 필요한 연산의 최솟값을 구해보자.
첫째 줄에 A, B (1 ≤ A < B ≤ 10^9)가 주어진다.
A를 B로 바꾸는데 필요한 연산의 최솟값에 1을 더한 값을 출력한다. 만들 수 없는 경우에는 -1을 출력한다.
int 타입이 아닌 long 타입으로 받는 것에 주의하자. 그런데 문제의 제한사항에서는 A와 B가 둘다 10^9 보다 작다고 했는데 왜 long 타입으로 받아야 할까?int 의 범위를 넘어갈 가능성이 있기 때문이다.int 의 범위를 넘어가버리게 된다.import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class Baekjoon_16953 {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine(), " ");
long a = Long.parseLong(st.nextToken());
long b = Long.parseLong(st.nextToken());
int cnt = 1;
while (b != a) {
String bStr = b + "";
int bLen = bStr.length();
if (b < a) {
cnt = -1;
break;
}
if (bStr.charAt(bLen - 1) != '1' && b % 2 != 0) {
cnt = -1;
break;
}
if (b % 2 == 0) {
b /= 2;
} else {
bStr = bStr.substring(0, bLen - 1);
b = Long.parseLong(bStr);
}
cnt++;
}
System.out.println(cnt);
}
}