정수 A를 B로 바꾸려고 한다. 가능한 연산은 다음과 같은 두 가지이다.
2를 곱한다.
1을 수의 가장 오른쪽에 추가한다.
A를 B로 바꾸는데 필요한 연산의 최솟값을 구해보자.
첫째 줄에 A, B (1 ≤ A < B ≤ 109)가 주어진다.
A를 B로 바꾸는데 필요한 연산의 최솟값에 1을 더한 값을 출력한다. 만들 수 없는 경우에는 -1을 출력한다.
import java.io.*;
import java.util.*;
public class No_16953 {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
int A = Integer.parseInt(st.nextToken());
int B = Integer.parseInt(st.nextToken());
int cnt = 1;
while (A != B){
if (B < A) {
System.out.println(-1);
System.exit(0);
}
if (B % 10 == 1) B /= 10;
else if (B % 2 == 0) B /= 2;
else {
System.out.println(-1);
System.exit(0);
}
cnt++;
}
System.out.println(cnt);
}
}
(B % 10 = 1)
일의 자리를 없앤다. (B /= 10)
(B % 2 = 0)
2로 나누어준다. (B /= 2)
https://waristo.tistory.com/48
그리디 문제는 풀 수 있지 ~ 하고 문제 봤는데 정말 그림조차 안그려져 풀이를 찾아봤다
세상은 넓은데 내가 할 일 중에 쉬운건 왤케 없냐