[문제 링크]
https://www.acmicpc.net/problem/13549
[난이도]
-Gold 5
[알고리즘]
- BFS
[코드]
import java.io.*;
import java.util.*;
public class Main {
static int max = 100000;
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 K = Integer.parseInt(st.nextToken());
boolean[] visited = new boolean[max + 1];
// BFS를 위한 큐 초기화
Queue<int[]> queue = new LinkedList<>();
queue.add(new int[]{N, 0});
int answer = Integer.MAX_VALUE;
while (!queue.isEmpty()) {
int[] tmp = queue.poll();
int current = tmp[0]; // 현재 위치
int time = tmp[1];
visited[current] = true;
// 동생의 위치에 도달하면 종료
if (current == K) {
answer = Math.min(answer, time);
}
// 가능한 이동
if (current * 2 <= max && !visited[current * 2]) {
queue.offer(new int[]{current * 2, time});
}
if (current + 1 <= max && !visited[current + 1]) {
queue.offer(new int[]{current + 1, time + 1});
}
if (current - 1 >= 0 && !visited[current - 1]) {
queue.offer(new int[]{current - 1, time + 1});
}
}
System.out.println(answer);
}
}
[풀이]
순간이동할때와 걸어서 이동할때 모두를 고려해서 계산해야 한다.
'코딩테스트' 카테고리의 다른 글
백준 13023 : ABCDE [JAVA] (0) | 2024.06.18 |
---|---|
백준 2573 : 빙산 [JAVA] (0) | 2024.06.18 |
백준 2589 : 보물섬 [JAVA] (0) | 2024.06.15 |
백준 1389 : 케빈 베이컨의 6단계 법칙 [JAVA] (0) | 2024.06.14 |
백준 18352 : 특정 거리의 도시 찾기 [JAVA] (1) | 2024.06.13 |