-
[백준] 13913 숨바꼭질 4ALGORITHM/BOJ 2021. 7. 9. 13:22
https://www.acmicpc.net/problem/13913
2021-07-09
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import java.util.LinkedList;import java.util.Queue;import java.util.Stack;import java.util.StringTokenizer;public class Main13913 {public static int N, K;public static int[] dir = {-1, 1, 2};public static boolean[] vtd;public static int[] arr;public static Queue<Integer> q;public static void main(String[] args) throws IOException {BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));StringTokenizer st = new StringTokenizer(bf.readLine());N = Integer.parseInt(st.nextToken());K = Integer.parseInt(st.nextToken());vtd = new boolean[100001];arr = new int[100001];q = new LinkedList<>();q.add(N);vtd[N] = true;int count = 0;Stack<Integer> s = new Stack<>();StringBuilder sb = new StringBuilder();if(N == K) {sb.append(N);} else {loop:while(!q.isEmpty()) {int size = q.size();while(size > 0) {int xx = q.poll();int nx = 0;for(int i = 0; i < 3; i++) {if(i == 2) {nx = xx * dir[i];} else {nx = xx + dir[i];}if(nx < 0 || nx > 100000 || vtd[nx]) continue;arr[nx] = xx;if(nx == K) {count++;int start = nx;s.push(nx);while(start != N) {s.push(arr[start]);start = arr[start];}break loop;}vtd[nx] = true;q.add(nx);}size--;}count++;}}while(!s.isEmpty()) {sb.append(s.pop()).append(" ");}System.out.println(count);System.out.println(sb.toString());}}cs #문제풀이
BFS문제이다.
1) 처음에 List를 들고다니면서, 경로를 저장해줬었는데 시간초과가 났다.
2) 두번째는 현재 시점의 바로 앞 경로만 따로 저장을 해주고, 마지막에 그 경로들을 다시 재탐색하면서 stringbuilder에 저장해줬다. 뒤집어서 해야해서,, insert를 썼었다. 그런데 여기서도 시간초과가 났었다.
12345sb.append(nx);while(start != N) {sb.insert(0, arr[start]).insert(String.valueOf(arr[start]).length(), " ");start = arr[start];}cs 3) 그래서 결국 경로 재탐색하면서 stack에 저장하고, 마지막으로 stack에 있는것들 pop하면서 stringbuilder에 append 하는 방식으로 처리했다.
'ALGORITHM > BOJ' 카테고리의 다른 글
[백준] 1074 Z (0) 2021.07.13 [백준] 2630 색종이 만들기 (0) 2021.07.09 [백준] 12851 숨바꼭질 2 (0) 2021.06.27 [백준] N과 M (시리즈) (0) 2021.04.21 [백준] 20056 마법사 상어와 파이어볼 (0) 2021.04.06