-
[백준] 12851 숨바꼭질 2ALGORITHM/BOJ 2021. 6. 27. 16:10
https://www.acmicpc.net/problem/12851
2021-06-27
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import java.util.LinkedList;import java.util.Queue;import java.util.StringTokenizer;public class Main12851 {public static int N, K;public static int[] dir = {2, -1, 1};public static boolean[] vtd;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];Queue<Integer> q = new LinkedList<>();q.add(N);vtd[N] = true;int time = 0;int count = 0;if(N == K) {count = 1;} else {while(!q.isEmpty()) {int size = q.size();count = 0;boolean flag = false;while(size > 0) {int x = q.poll();vtd[x] = true;int nx = 0;for(int i = 0; i < dir.length; i++) {if(i == 0) {nx = x * dir[i];} else {nx = x + dir[i];}if(nx < 0 || nx > 100000) continue;if(nx == K) {flag = true;count++;}if(!vtd[nx]) {q.add(nx);}}size--;}time++;if(flag) break;}}System.out.println(time);System.out.println(count);}}cs #문제풀이
몇 달만이지;;보통의 bfs 문제를 풀때는 queue에 push 하기 전에 visit 체크를 했었다.
하지만 이 문제 같은 경우에는 push 할 때는 경우의 수가 겹칠 수가 있어서, pop 시점에서 visit 체크를 해줬어야 했다.
예시) 1 3 일 경우, 2 2 가 답으로 나와야한다.
'ALGORITHM > BOJ' 카테고리의 다른 글
[백준] 2630 색종이 만들기 (0) 2021.07.09 [백준] 13913 숨바꼭질 4 (0) 2021.07.09 [백준] N과 M (시리즈) (0) 2021.04.21 [백준] 20056 마법사 상어와 파이어볼 (0) 2021.04.06 [백준] 17779 게리맨더링2 (0) 2021.03.29