문제 설명
풀이
이번에는 다른 방식으로 BFS를 풀었다.
시간을 계속 들고다니고 간단한 BFS처럼 풀어주면 끝이다.
코드
import java.util.*;
import java.io.*;
class Main {
static int N, K;
static int minTime = Integer.MAX_VALUE;
static boolean[] visit = new boolean[100001];
public static void main(String[] args) throws Exception {
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));
return;
}
else{
bfs();
System.out.println(minTime);
}
}
public static void bfs() {
Queue<int[]> q = new LinkedList<>();
q.offer(new int[] {N, 0});
while(!q.isEmpty()) {
int[] node = q.poll();
visit[node[0]] = true;
if(node[0] == K) minTime = Math.min(minTime, node[1]);
if(node[0] * 2 <= 100000 && visit[node[0] * 2] == false) q.offer(new int[] {node[0] * 2, node[1]});
if(node[0] + 1 <= 100000 && visit[node[0] + 1] == false) q.offer(new int[] {node[0] + 1, node[1] + 1});
if(node[0] - 1 >= 0 && visit[node[0] - 1] == false) q.offer(new int[] {node[0] - 1, node[1] + 1});
}
}
}
https://www.acmicpc.net/problem/13549
'개발합시다. > JAVA 알고리즘 문제풀이' 카테고리의 다른 글
BOJ_12851 숨바꼭질 2 [Java] (G5) (0) | 2021.11.24 |
---|---|
BOJ_17142 연구소 3 [Java] (G4) (0) | 2021.11.22 |
BOJ_1303 전투[Java](S1) (0) | 2021.11.18 |
BOJ_1743 음식물 쓰레기[Java] (S1) (0) | 2021.11.18 |
BOJ_7576 토마토 [Java] (S1) (0) | 2021.11.16 |