[伯俊]13549号鬼ごっこ3-Java,Java
難易度
銀色.
質問する
https://www.acmicpc.net/problem/13549
に答える
ナビゲーションパターン、BFSで解決
1697号鬼ごっこは少し変形していて、一瞬で0秒移動した後*2.
瞬間移動では時間は流れないので,1秒後に発生する論理とは別に処理する.
-1,+1の位置より先に2人の位置を計算した.
ここでのポイントは2人の位置だけを計算するのではなく、最大位置100000まで計算します.
コード#コード#
package 그래프탐색;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.LinkedList;
import java.util.Queue;
import java.util.StringTokenizer;
public class BOJ13549 {
static int n, k;
static int[] arr;
static Queue<Integer> q = new LinkedList<>();
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
n = Integer.parseInt(st.nextToken());
k = Integer.parseInt(st.nextToken());
if (n >= k) {
System.out.println(n - k);
} else {
System.out.println(bfs());
}
}
static int bfs() {
arr = new int[100001];
Arrays.fill(arr, -1);
q.add(n);
arr[n] = 0;
while (!q.isEmpty()) {
int x = q.poll();
if (x == k)
return arr[x];
int tmp = x * 2;
while (tmp <= 100000 && arr[tmp] == -1) {
arr[tmp] = arr[x];
q.add(tmp);
tmp *= 2;
}
for (int i = 0; i < 2; i++) {
int nx;
if (i == 0)
nx = x - 1;
else
nx = x + 1;
if (nx >= 0 && nx < 100001 && arr[nx] == -1) {
arr[nx] = arr[x] + 1;
q.add(nx);
}
}
}
return 0;
}
}
Reference
この問題について([伯俊]13549号鬼ごっこ3-Java,Java), 我々は、より多くの情報をここで見つけました https://velog.io/@kimmjieun/백준-13549번-숨바꼭질-3-Java-자바テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol