www.acmicpc.net/problem/1697

 

1697번: 숨바꼭질

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

www.acmicpc.net

 

 

문제 분석

- bfs를 사용하여 동생을 만날 때까지 탐색한다.

cf) 수빈이와 동생이 있는 점의 위치는 0~100000 사이다. 

 

 

문제 풀이

1) 수빈이와 동생의 위치를 받는다.

2) bfs를 통해 수빈이가 동생을 만날 때까지 탐색한다.

3) 만나면 해당 값이 최소인지 비교하고 마지막에 bfs를 나와서 정답을 출력한다.

 

import 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 Main {
	private static int N, K, min;
	private static boolean[] visited;

	private static void input() throws IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

		StringTokenizer st;
		min = Integer.MAX_VALUE;

		st = new StringTokenizer(br.readLine());
		N = Integer.parseInt(st.nextToken());
		K = Integer.parseInt(st.nextToken());

		visited = new boolean[100001];

		bfs(N);
		System.out.println(min);

	}// input()

	private static void bfs(int sx) {
		Queue<Node> q = new LinkedList<>();
		q.add(new Node(sx, 0));
		visited[sx] = true;

		while (!q.isEmpty()) {
			Node cur = q.poll();
			int r = cur.x;
			int d = cur.depth;
			
			if (r == K) {
				min = Math.min(min, (d));
			}
			
			for (int i = 0; i < 3; i++) {
				int nr;
				if (i == 0) {
					nr = r + 1;
				} else if (i == 1) {
					nr = r - 1;
				} else {
					nr = r * 2;
				}
								
				if (nr >= 0 && nr < visited.length) {
					if (!visited[nr]) {
						q.add(new Node(nr, d + 1));
						visited[nr] = true;
					}
				}
			}
		}
	}// bfs

	public static void main(String[] args) throws IOException {
		input();
	}// main

	static class Node {
		int x, depth;

		public Node(int x, int depth) {
			this.x = x;
			this.depth = depth;
		}
	}// Node-class
}// class-end

 

'Algorithm > BOJ' 카테고리의 다른 글

BOJ 1442 벽 부수고 이동하기 2  (0) 2021.03.25
BOJ 2206 벽 부수고 이동하기  (0) 2021.03.24
BOJ 7562 나이트의이동  (0) 2021.03.22
BOJ 2178 미로 탐색  (0) 2021.03.19
BOJ 7569 토마토  (0) 2021.03.18