[BJ1697] 숨바꼭질
✏️ 𝗔𝗹𝗴𝗼𝗿𝗶𝘁𝗵𝗺/백준 알고리즘

[BJ1697] 숨바꼭질

 백준 - 숨바꼭질 

문제 링크

https://www.acmicpc.net/problem/1697

 

1697번: 숨바꼭질

수빈이는 동생과 숨바꼭질을 하고 있다. 수빈이는 현재 점 N(0 ≤ N ≤ 100,000)에 있고, 동생은 점 K(0 ≤ K ≤ 100,000)에 있다. 수빈이는 걷거나 순간이동을 할 수 있다. 만약, 수빈이의 위치가 X일

www.acmicpc.net

 

문제 입출력

5 17
4

 

문제 풀이

import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.InputStreamReader;
import java.util.ArrayDeque;
import java.util.Queue;
import java.util.StringTokenizer;


// N: 수빈이 위치 
// K: 동생 위치 
// ans: 몇 초만에 찾았는지 
public class Main {
	static int N, K, ans;
	static final int MAX = 100000;
	static boolean[] visit = new boolean[MAX + 1];

	static Queue<Integer> q = new ArrayDeque<>();


	public static void main(String[] args) throws Exception {
		System.setIn(new FileInputStream("input.txt"));
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		StringTokenizer st = new StringTokenizer(br.readLine());

		N = Integer.parseInt(st.nextToken());
		K = Integer.parseInt(st.nextToken());

		bfs(N);

		System.out.println(ans);

	} // end main


	private static void bfs(int x) {
		visit[x] = true;
		q.offer(x);

		while (!q.isEmpty()) {
			int size = q.size();

			for (int i = 0; i < size; i++) {
				//System.out.println(size + " " + i + " " + q + " " + ans);
				int cx = q.poll();

				if (cx == K) return;

				int x1 = cx - 1;
				int x2 = cx + 1;
				int x3 = cx * 2;

				if (x1 >= 0 && !visit[x1]) {
					visit[x1] = true;
					q.offer(x1);
				}

				if (x2 <= MAX && !visit[x2]) {
					visit[x2] = true;
					q.offer(x2);
				}

				if (x3 <= MAX && !visit[x3]) {
					visit[x3] = true;
					q.offer(x3);
				}

			}

			ans++;
		}

	} // end bfs
}

  • 출력된 형태는 size, i, queue, ans
  • bfs 를 이용하여 풉니다.
  • bfs 는 너비를 탐색하면서 가기 때문에 최소를 구하기에 좋습니다.
  • bfs 큐가 비지 않을 때까지 돌면서 또 한번, 큐에 쌓인 사이즈만큼 돌아줍니다.
  • 그렇게 되면 depth 만큼 돌게 됩니다. 그렇게 depth 가 쌓이게 되어 정답을 찾으면 그 depth 를 리턴하면 최소값이 됩니다.

 

 

 

 

 

 

 

 

# 백준 숨바꼭질 java # 백준 숨바꼭질 java bfs


 

728x90

'✏️ 𝗔𝗹𝗴𝗼𝗿𝗶𝘁𝗵𝗺 > 백준 알고리즘' 카테고리의 다른 글

[BJ17135] 캐슬 디펜스  (0) 2022.09.12
[BJ1987] 알파벳  (0) 2022.09.11
[BJ9663] N-Queen  (0) 2022.09.11
[BJ3109] 빵집  (0) 2022.09.09
[BJ2667] 단지 번호 붙이기  (0) 2022.09.05