Algorithm/백준
[백준] 1697번 숨바꼭질
sirius
2021. 3. 11. 10:11
https://www.acmicpc.net/problem/1697
1697번: 숨바꼭질
수빈이는 동생과 숨바꼭질을 하고 있다. 수빈이는 현재 점 N(0 ≤ N ≤ 100,000)에 있고, 동생은 점 K(0 ≤ K ≤ 100,000)에 있다. 수빈이는 걷거나 순간이동을 할 수 있다. 만약, 수빈이의 위치가 X일
www.acmicpc.net
N과 K가 같을 경우의 처리를 해줘야 한다.
import java.util.*;
import java.io.*;
public class Main {
static int N;
static int K;
static int[] visit = new int[100001];
public static void main(String[] args) throws Exception {
Scanner sc = new Scanner(System.in);
N = sc.nextInt();
K = sc.nextInt();
if (N == K) {
System.out.print(0);
} else {
bfs();
}
}
public static void bfs() {
Queue<Integer> q = new LinkedList<>();
q.offer(N);
// 방문처리
visit[N] = 1;
while (!q.isEmpty()) {
int num = q.poll();
for (int i = 0; i < 3; i++) {
int next;
if (i == 0) {
next = num + 1;
} else if (i == 1) {
next = num - 1;
} else {
next = num * 2;
}
if (next == K) {
System.out.println(visit[num]);
return;
}
// 범위 벗어나는지 체크, 방문여부 체크
if(next >= 0 && next < visit.length && visit[next] == 0) {
q.offer(next);
visit[next] = visit[num] + 1;
}
}
}
}
}