728x90
https://www.acmicpc.net/problem/16953
문제
정수 A를 B로 바꾸려고 한다. 가능한 연산은 다음과 같은 두 가지이다.
- 2를 곱한다.
- 1을 수의 가장 오른쪽에 추가한다.
A를 B로 바꾸는데 필요한 연산의 최솟값을 구해보자.
입력
첫째 줄에 A, B (1 ≤ A < B ≤ $10^9$)가 주어진다.
출력
A를 B로 바꾸는데 필요한 연산의 최솟값에 1을 더한 값을 출력한다. 만들 수 없는 경우에는 -1을 출력한다.
728x90
예제 입력 1
2 162
예제 출력 1
5
2 → 4 → 8 → 81 → 162
예제 입력 2
4 42
예제 출력 2
-1
예제 입력 3
100 40021
예제 출력 3
5
100 → 200 → 2001 → 4002 → 40021
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class Main {
public static void main(String[] args) throws Exception{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st;
st = new StringTokenizer(br.readLine());
int A = Integer.parseInt(st.nextToken());
int B = Integer.parseInt(st.nextToken());
int result = 1;
while(A != B) {
if(B < A) {
result = -1;
break;
}
if(B % 10 == 1) B /= 10;
else if(B % 2 == 0) B /= 2;
else {
result = -1;
break;
}
result++;
}
System.out.println(result);
}
}
728x90
'Problem Solving > BOJ' 카테고리의 다른 글
[백준, BOJ 12852] 1로 만들기 2 (java) (0) | 2023.04.16 |
---|---|
[백준, BOJ 2342] Dance Dance Revolution (java) (0) | 2023.04.16 |
[백준, BOJ 2252] 줄 세우기 (java) (0) | 2023.04.16 |
[백준, BOJ 1644] 소수의 연속합 (java) (0) | 2023.04.16 |
[백준, BOJ 20040] 사이클 게임 (java) (0) | 2023.04.16 |