January 15, 2022
백준 문제 링크 : https://www.acmicpc.net/problem/16953
정수를 A에서 B로 바꿀 때 가능한 연산은 2를 곱하거나, 1을 수의 가장 오른쪽에 추가하는 것이다. 이떄 필요한 연산의 최솟값을 구해야한다.
가능한 연산의 우선순위를 주어준다.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class B_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 = 0;
while(A!=B){
if(B%10 == 1){
B = (B-1)/10;
}
else if(B%2 == 0){
B = B/2;
}
else{
cnt = -2;
break;
}
cnt++;
if(B == 0){
cnt = -2;
break;
}
}
System.out.println(cnt+1);
}
}
문제에서는 A->B를 구하는 거였지만 이를 뒤집어서 생각하여 B->A를 푸는 방법이 좋은 아이디어 였던 것 같다. 문제를 풀때 항상 전형적인 방법이 아닌 다른 방법을 생각해 보아야겠다.