-
[Baekjoon Online Judge] 1697번: 숨바꼭질문제 풀이/Baekjoon Online Judge 2021. 1. 16. 18:58
1697번: 숨바꼭질
수빈이는 동생과 숨바꼭질을 하고 있다. 수빈이는 현재 점 N(0 ≤ N ≤ 100,000)에 있고, 동생은 점 K(0 ≤ K ≤ 100,000)에 있다. 수빈이는 걷거나 순간이동을 할 수 있다. 만약, 수빈이의 위치가 X일
www.acmicpc.net
요구사항
- 수빈이는 점 N에 있다. 0 <= N <= 100,000
- 동생은 점 K에 있다. 0 <= K <= 100,000
- 수빈이의 위치가 X일 때 X - 1, x + 1, 2 * X로 이동할 수 있다.
- 수빈이가 동생을 찾을 수 있는 가장 빠른 시간을 출력한다.입력
첫 번째 줄에 수빈이가 있는 위치 N과 동생이 있는 위치 K가 주어진다. N과 K는 정수이다.
출력
수빈이가 동생을 찾는 가장 빠른 시간을 출력한다.
import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.IOException; import java.io.InputStreamReader; import java.io.OutputStreamWriter; import java.util.LinkedList; import java.util.Queue; public class Baekjoon1697 { static int n; static int k; static int[] visited = new int[100001]; public static int bfs(int n) { if (n == k) return 0; Queue<Integer> queue = new LinkedList<>(); queue.add(n); visited[n] = 1; while(!queue.isEmpty()) { int position = queue.poll(); for (int i = 0; i < 3; i++) { int next = 0; if (i == 0) { next = position - 1; } else if (i == 1) { next = position + 1; } else if (i == 2) { next = 2 * position; } if (next == k) return visited[position]; if (isPostiontion(next)) { queue.add(next); visited[next] = visited[position] + 1; } } } return 0; } public static boolean isPostiontion(int position) { if (position >= 0 && position < visited.length && visited[position] == 0) { return true; } else return false; } public static void main(String[] args) throws IOException { BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in)); BufferedWriter bufferedWriter = new BufferedWriter(new OutputStreamWriter(System.out)); String[] input = bufferedReader.readLine().split(" "); n = Integer.parseInt(input[0]); k = Integer.parseInt(input[1]); bufferedWriter.write(String.valueOf(bfs(n))); bufferedWriter.flush(); bufferedReader.close(); bufferedWriter.close(); } }
BFS를 활용하여 풀이하였다. 수빈이가 움직이는 방법이 총 3가지 이기 때문에 queue에 각각의 위치를 담아두고 위치가 k가 될 때 해당 초를 반환해준다.
'문제 풀이 > Baekjoon Online Judge' 카테고리의 다른 글
[Baekjoon Online Judge] 2902번: KMP는 왜 KMP일까? (0) 2021.01.17 [Baekjoon Online Judge] 1012번: 유기농 배추 (0) 2021.01.17 [Baekjoon Online Judge] 2606번: 바이러스 (0) 2021.01.14 [Baekjoon Online Judge] 7576번: 토마토 (0) 2021.01.14 [Baekjoon Online Judge] 2667번: 단자번호붙이기 (0) 2021.01.13