🔺 문제
1697번: 숨바꼭질
수빈이는 동생과 숨바꼭질을 하고 있다. 수빈이는 현재 점 N(0 ≤ N ≤ 100,000)에 있고, 동생은 점 K(0 ≤ K ≤ 100,000)에 있다. 수빈이는 걷거나 순간이동을 할 수 있다. 만약, 수빈이의 위치가 X일
www.acmicpc.net
🔺 코드
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
|
import java.util.*;
import java.io.*;
public class Main {
static int N, K;
static int[] arr = new int[100001];
static int minTime = Integer.MAX_VALUE;
static int next;
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine()," ");
N = Integer.parseInt(st.nextToken()); // 수빈
K = Integer.parseInt(st.nextToken()); // 동생
if(N >= K) { // 수빈이는 -1로만 이동할 수 있음
System.out.println(N - K);
return;
}
BFS();
System.out.println(minTime);
}
static void BFS() {
Queue<Integer> queue = new LinkedList<>();
queue.add(N);
arr[N] = 1; // 시작점 표시
while(!queue.isEmpty()) {
int now = queue.poll();
if(minTime < arr[now]) return;
for(int d = 0 ; d < 3; d++) {
if(d == 0) next = now + 1;
else if(d == 1) next = now - 1;
else next = now * 2;
if(next < 0 || next > 100000) continue;
if(next == K) {
minTime = arr[now];
return; // BFS 종료
}
if(arr[next] == 0 || arr[next] == arr[now] + 1) {
queue.add(next);
arr[next] = arr[now] + 1;
}
}
}
}
}
|
cs |
✅ 해결 아이디어
✔ BFS
- 가장 짧은 시간 구하기이므로 BFS 사용
🔺 다른 풀이들
- 과정 상세하게 보여주셔서 좋고, 테스트값까지 적어주심👍👍👍 (복습용)
[백준/1697/Java] 숨바꼭질 - BFS 풀이
BFS (너비 우선 탐색, Breadth-First Search) 알고리즘에서 기본적인 문제 하나를 풀어보도록 하겠습니다. 문제 1697번: 숨바꼭질 (acmicpc.net) 1697번: 숨바꼭질 수빈이는 동생과 숨바꼭질을 하고 있다. 수빈
smartpro.tistory.com
- 풀이를 글로 잘 설명해주셨다! 그리고 굳이 min 변수를 사용할 필요가 없다는 걸 보여주심.
[Algorithm] 백준_1697 숨바꼭질 JAVA
수빈이의 위치가 N(0 ≤ N ≤ 100,000), 동생은 K(0 ≤ K ≤ 100,000)에 위치하고 있다. 수빈이는 자신의 위치에서 N+1, N-1, N\*2 만큼 이동할 수 있는데, 이때 수빈이가 동생을 찾을 수 있는 가장 빠른 시간
velog.io
- 갠적으로 가장 깔끔하다고 생각하는 풀이. 다음에 이렇게 풀어봐야지
[백준] 1697번 숨바꼭질 - Java, 자바
실버 1https://www.acmicpc.net/problem/1697그래프탐색 문제 가장 빠른 시간을 구해야하는 문제여서 BFS로 접근했다. 이 문제에서 헤맸던 점은 걸린 시간을 count로 코드로 짜다보니 결과가 너무 크게 나왔
velog.io
💬 느낀 점
나는 "숨바꼭질 2" 문제를 먼저 풀었는데
확실히 "숨바꼭질 1" 문제를 풀고 나서 2를 풀었으면 훨씬 더 빠르게 풀 수 있었을 것 같다.
그래도 바로 전에, 숨바꼭질 2 풀었을 때 디버깅해보면서 코드 이해했고,
그거 토대로 이번 문제 코드는 스스로 작성해보려고 해서 그런지
숨바2보다는 훨 빠르게 풀었다..!
이래서 많이 풀어보는 게 중요헌 것 같다,,,,
1회독 | 2회독 | 3회독 | 4회독 | 5회독 |
V |
(참고)
✔ 숨바꼭질 문제 시리즈...
[백준/JAVA] 12851번: 숨바꼭질 2
🔺 문제 12851번: 숨바꼭질 2 수빈이는 동생과 숨바꼭질을 하고 있다. 수빈이는 현재 점 N(0 ≤ N ≤ 100,000)에 있고, 동생은 점 K(0 ≤ K ≤ 100,000)에 있다. 수빈이는 걷거나 순간이동을 할 수 있다. 만
bono039.tistory.com
'코테 > 백준' 카테고리의 다른 글
[백준/JAVA] 13913번: 숨바꼭질 4 (0) | 2023.05.27 |
---|---|
[백준/JAVA] 13549번: 숨바꼭질 3 (0) | 2023.05.26 |
[백준/JAVA] 12851번: 숨바꼭질 2 (0) | 2023.05.26 |
[백준/JAVA] 16953번: A → B (0) | 2023.05.26 |
[백준/JAVA] 2606번: 바이러스 (1) | 2023.05.26 |