import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.LinkedList;
import java.util.Queue;
import java.util.StringTokenizer;
public class Main{
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
int N = Integer.parseInt(st.nextToken());
int M = Integer.parseInt(st.nextToken());
boolean[] visited = new boolean[100001];
Queue<Integer> queue = new LinkedList<Integer>();
queue.add(N);
visited[N] = true;
int count = 0;
while(!queue.isEmpty()){
int size = queue.size();
while(size!=0){
int curr = queue.poll();
size--;
if(curr == M){
System.out.println(count);
return;
}
int temp1 = curr-1;
int temp2 = curr+1;
int temp3 = curr*2;
while(true) {
if(temp3 == M){
System.out.println(count);
return;
}
if(temp3<=100000 && !visited[temp3]){
visited[temp3] = true;
}
if(temp2<=100000 && !visited[temp2]){
queue.add(temp2);
visited[temp2] = true;
}
if(temp1>=0 && temp1<=100000 && !visited[temp1]){
queue.add(temp1);
visited[temp1] = true;
}
temp1 = temp3-1;
temp2 = temp3+1;
temp3 = temp3*2;
if(temp1>100000 || temp3<=0) break;
}
}
count++;
}
br.close();
}
}
숨바꼭질1을 변형한 문제이다. 위치가 2가 될때는 시간이 소모되지 않는 차이점이 있다.
따라서 시간초과가 걸리지 않는 2를 먼저 탐색해주어야 한다. 즉. 탐색 순서에 따라 정답여부가 갈린다.
이 문제에서 주의해야 할점이다.