
n m 을 받는다
m 이 가장 마지막이 1 인지 확인한다
1 인경우 num의 1의 자리 수를 뺀다 count +1
아닌 경우
2 로 나누어 질때
num을 2 로 나눈다 카운터 +1
아닐때
-1 을 출력 한다
num 이 n 이랑 같다면 출력 return
작으면 -1 출력 return 한다
즉 이번 문제는 재귀를 이용해 top-down 방식으로 접근해 풀었다.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class boj16953 {
private static int n;
public static void main(String[] args) throws IOException{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
n = Integer.parseInt(st.nextToken());
int m = Integer.parseInt(st.nextToken());
re(m,0);
}
private static void re(int num, int count){
if(num==n){
System.out.println(count+1);
return;
}
if(num < n){
System.out.println(-1);
return;
}
String sNum = String.valueOf(num);
if(num%2==0){
re(num/2,count+1);
} else{
if(sNum.charAt(sNum.length()-1) == '1'){
int n = Integer.parseInt(sNum.substring(0,sNum.length()-1));
re(n,count+1);
}else{
System.out.println(-1);
return;
}
}
}
}