PS/Java
[백준] 16953. A → B
siyamaki
2022. 3. 31. 10:09
정수 A를 B로 바꾸려고 한다. 가능한 연산은 다음과 같은 두 가지이다.
- 2를 곱한다.
- 1을 수의 가장 오른쪽에 추가한다.
A를 B로 바꾸는데 필요한 연산의 최솟값을 구해보자.
입력
첫째 줄에 A, B (1 ≤ A < B ≤ 109)가 주어진다.
출력
A를 B로 바꾸는데 필요한 연산의 최솟값에 1을 더한 값을 출력한다. 만들 수 없는 경우에는 -1을 출력한다.
예제 입력 1
2 162
예제 출력 1
5
2 → 4 → 8 → 81 → 162
import java.util.Scanner;
public class Main {
static int A;
static int B;
static int min;
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
A = scanner.nextInt();
B = scanner.nextInt();
min = Integer.MAX_VALUE;
bfs(A, 1);
System.out.println(min == Integer.MAX_VALUE ? -1 : min);
}
public static void bfs(double result, int count) {
if(result > B) {
return;
}
if(result == B) {
min = Math.min(count, min);
return;
}
bfs(result * 2, count + 1);
bfs(result * 10 + 1, count + 1);
}
}
재귀함수를 이용해 현재 값에 * 2를 한 값과 오른쪽에 1을 붙인 값을 다시 bfs함수로 넣어 모든 경우의 수를 탐색한다