[BOJ] 1697. 숨바꼭질
15 Apr 2026
Reading time ~1 minute
풀이
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.Queue;
import java.util.Scanner;
public class Main {
static int N,K;
static int ans = -1;
static boolean check[];
static int MAX;
static ArrayList<Integer> list = new ArrayList<Integer>();
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
ans = -1;
N = sc.nextInt();
K = sc.nextInt();
MAX = 100000;
check = new boolean[2*MAX+1];
bfs(N);
System.out.println(ans);
}
public static void bfs(int N) {
Queue<Integer> q = new LinkedList<Integer>();
q.add(N);
while(!q.isEmpty()) {
int qSize = q.size();
for (int i = 0; i < qSize; i++) {
int v= q.poll();
if(v == K) {
q.clear();
break;
}
if((v-1 >= 0 && v-1 < MAX+1)&&!check[v-1]) {
check[v-1]=true;
q.add(v-1);
}
if((v+1 >= 0 && v+1 < MAX+1)&&!check[v+1]) {
check[v+1]=true;
q.add(v+1);
}
if((2*v >= 0 && 2*v < MAX+1)&&!check[2*v]) {
check[2*v]=true;
q.add(2*v);
}
}
ans++;
}
}
}