BFS 코드
import java.util.*;
import java.io.*;
public class Main {
static int answer;
static long A,B;
public static void main(String[] args) throws Exception{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
A = Integer.parseInt(st.nextToken());
B = Integer.parseInt(st.nextToken());
answer = 0;
Queue<long[]> queue = new LinkedList<>();
queue.add(new long[]{A,answer});
while(!queue.isEmpty()){
long[] cur = queue.poll();
if(cur[0]==B) {
answer = (int)cur[1];
break;
}
long next = cur[0]*2;
if(next>=0 && next<=B) queue.add(new long[]{next,cur[1]+1});
next = cur[0]*10+1;
if(next<=B) queue.add(new long[]{next,cur[1]+1});
}
if(answer==0) System.out.println(-1);
else System.out.println(answer+1);
}
}
DFS 코드
import java.util.*;
import java.io.*;
public class BOJ169536 {
static int answer = Integer.MAX_VALUE;
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
long A = Integer.parseInt(st.nextToken());
long B = Integer.parseInt(st.nextToken());
dfs(A,B,0);
if(answer == Integer.MAX_VALUE) System.out.println(-1);
else System.out.println(answer);
}
private static void dfs(long curr, long B, int cnt){
if(curr == B) {
cnt++;
answer = Math.min(answer,cnt);
return;
}
if(curr>B) return;
dfs(curr*2,B,cnt+1);
dfs(curr*10+1,B,cnt+1);
}
}
문제 조건을 잘 보도록