![[백준 1697번 / Java] 숨바꼭질 - BFS](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbukE0F%2FbtsmF5GO9jT%2FQvjnMwuw9C9EEhgKKhdql0%2Fimg.png)
[백준 1697번 / Java] 숨바꼭질 - BFS코딩테스트/백준2023. 7. 7. 20:36
Table of Contents
728x90
728x90
문제 링크
Silver 1
https://www.acmicpc.net/problem/1697
1697번: 숨바꼭질
수빈이는 동생과 숨바꼭질을 하고 있다. 수빈이는 현재 점 N(0 ≤ N ≤ 100,000)에 있고, 동생은 점 K(0 ≤ K ≤ 100,000)에 있다. 수빈이는 걷거나 순간이동을 할 수 있다. 만약, 수빈이의 위치가 X일
www.acmicpc.net
풀이
단순 BFS 구현 문제로 너비를 +1, -1, *2의 경우로 두었고 문제 조건에 알맞게 예외상황에 대한 처리를 하면 되는데
N == K일 때의 상황을 고려하지 않아서 20분동안 삽질했다..
꼼꼼하게 보고 놓치지 말자..
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.*;
public class BaekJoon1697 {
private static boolean[] bl = new boolean[100001];
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine(), " ");
int N = Integer.parseInt(st.nextToken());
int K = Integer.parseInt(st.nextToken());
if(N == K) {
System.out.println(0);
return;
}
Queue<Integer> que = new LinkedList<>();
que.add(N);
bfs(que, 0, K);
}
private static void bfs(Queue<Integer> que, int time, int K) {
while(!que.isEmpty()) {
int size = que.size();
time++;
for(int i = 0; i < size; i++) {
int now = que.poll();
bl[now] = true;
if(now + 1 == K || now - 1 == K || now * 2 == K) {
System.out.println(time);
return;
}
if(now + 1 <= 100000 && !bl[now + 1]) {
que.add(now + 1);
bl[now + 1] = true;
}
if(now - 1 >= 0 && !bl[now - 1]) {
que.add(now - 1);
bl[now - 1] = true;
}
if(now * 2 <= 100000 && !bl[now * 2]) {
que.add(now * 2);
bl[now * 2] = true;
}
}
}
System.out.println(time);
}
}
728x90
300x250
@mag1c :: 꾸준히 재밌게
2023.04 ~ 백엔드 개발자의 기록
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!