| 문제
정수 A를 B로 바꾸려고 한다. 가능한 연산은 다음과 같은 두 가지이다.
- 2를 곱한다.
- 1을 수의 가장 오른쪽에 추가한다.
A를 B로 바꾸는데 필요한 연산의 최솟값을 구해보자.
| 입력
첫째 줄에 A, B (1 ≤ A < B ≤ 109)가 주어진다.
| 출력
A를 B로 바꾸는데 필요한 연산의 최솟값에 1을 더한 값을 출력한다. 만들 수 없는 경우에는 -1을 출력한다.
| 풀이
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.*;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
StringBuilder sb = new StringBuilder();
int A = Integer.parseInt(st.nextToken());
int B = Integer.parseInt(st.nextToken());
int count = 1;
while (A != B) {
if (B < A) {
count = -1;
break;
}
if (B % 10 == 1)
B /= 10;
else if (B % 2 == 0)
B /= 2;
else{
count = -1;
break;
}
count++;
}
System.out.println(count);
}
}
| 정리
반대로 B를 A로 만드는 방법으로 접근해서 풀이함
B가 A 보다 작거나 B의 끝자리 수가 1이 아니거나 2로 나눠지지 않는다면 만들 수 없는 경우이기 때문에 count를 -1로 변경한다.