[백준 13913 : JAVA] 숨바꼭질 4 / BFS
문제
풀이
최단 시간에 대해선 BFS를 통해 쉽게 알아낼 수 있다.
경로를 출력하는 부분에서 처음엔 List로 각 지점에서 거쳐온 경로를 모두 저장하는 식으로 했는데, 시간 초과로 실패했다.
대신, 각 지점별로 모든 경로를 저장하는게 아니라, 자신의 부모 위치만 저장한다.
코드
import java.io.*;
import java.util.*;
public class Main {
private static BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
private static int N, K;
private static int[] visited = new int[100001];
private static int[] parent = new int[100001];
public static void main(String[] args) throws IOException {
StringTokenizer st = new StringTokenizer(br.readLine());
N = Integer.parseInt(st.nextToken());
K = Integer.parseInt(st.nextToken());
bfs(N, K);
System.out.println(visited[K] - 1);
Stack<Integer> s = new Stack<>();
int idx = K;
while (idx != N) {
s.push(idx);
idx = parent[idx];
}
s.push(idx);
while (!s.isEmpty()) {
System.out.print(s.pop() + " ");
}
br.close();
}
private static void bfs(int start, int end) {
Queue<Integer> q = new LinkedList<>();
q.add(start);
visited[start] = 1;
while (!q.isEmpty()) {
int now = q.poll();
if (now + 1 <= 100000 && visited[now + 1] == 0) {
visited[now + 1] = visited[now] + 1;
parent[now + 1] = now;
q.add(now + 1);
}
if (now - 1 >= 0 && visited[now - 1] == 0) {
visited[now - 1] = visited[now] + 1;
parent[now - 1] = now;
q.add(now - 1);
}
if (now * 2 <= 100000 && visited[now * 2] == 0) {
visited[now * 2] = visited[now] + 1;
parent[now * 2] = now;
q.add(now * 2);
}
if (visited[end] != 0) return;
}
}
}
'Algorithm > Baekjoon' 카테고리의 다른 글
[백준 2610 : JAVA] 회의준비 / 플로이드 와샬 + DFS (0) | 2020.10.18 |
---|---|
[백준 17071 : JAVA] 숨바꼭질 5 / BFS (0) | 2020.10.02 |
[백준 17141 : JAVA] 연구소 2 / BFS + 조합 (0) | 2020.09.27 |
[백준 9466 : JAVA] 텀 프로젝트 / DFS (0) | 2020.09.23 |
[백준 11438 : JAVA] LCA 2 / 최소 공통 조상 (0) | 2020.09.11 |
댓글
이 글 공유하기
다른 글
-
[백준 2610 : JAVA] 회의준비 / 플로이드 와샬 + DFS
[백준 2610 : JAVA] 회의준비 / 플로이드 와샬 + DFS
2020.10.18 -
[백준 17071 : JAVA] 숨바꼭질 5 / BFS
[백준 17071 : JAVA] 숨바꼭질 5 / BFS
2020.10.02 -
[백준 17141 : JAVA] 연구소 2 / BFS + 조합
[백준 17141 : JAVA] 연구소 2 / BFS + 조합
2020.09.27 -
[백준 9466 : JAVA] 텀 프로젝트 / DFS
[백준 9466 : JAVA] 텀 프로젝트 / DFS
2020.09.23