개발개발자
숨바꼭질 (1697번) 본문
문제
수빈이와 동생의 위치가 주어졌을 때, 수빈이가 동생을 찾을 수 있는 가장 빠른 시간이 몇 초 후인지 구하는 프로그램을 작성하시오.
입력
첫 번째 줄에 수빈이가 있는 위치 N과 동생이 있는 위치 K가 주어진다.
출력
수빈이가 동생을 찾는 가장 빠른 시간을 출력한다.
예제 입력
5 17
풀이방법
import java.util.*;
public class Test {
public static final int MAX = 1000001;
public static void main(String[] args) {
boolean[] check = new boolean[MAX];
int[] dist = new int[MAX];
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int m = sc.nextInt();
check[n] = true;
dist[n] = 0;
Queue <Integer> q = new LinkedList<Integer>();
q.add(n);
int now;
while(!q.isEmpty()) {
now = q.remove();
if(now-1 >= 0 && check[now-1] == false) {
check[now-1] = true;
q.add(now-1);
dist[now-1] = dist[now]+1;
}
if(now+1 < MAX && check[now+1] == false) {
check[now+1] = true;
q.add(now+1);
dist[now+1] = dist[now]+1;
}
if(now*2 < MAX && check[now*2] == false) {
check[now*2] = true;
q.add(now*2);
dist[now*2] = dist[now]+1;
}
}
System.out.println(dist[m]);
}
}