| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 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 |
Tags
- c++
- 그리디
- cpp
- 누적합
- level2
- java
- 임베디드
- BFS
- dp
- 코틀린
- C
- 구현
- 우선순위큐
- 다이나믹프로그래밍
- 자바
- 컴퓨터 비전
- 다이나믹 프로그래밍
- 2018 KAKAO BLIND RECRUITMENT
- lv2
- 백준
- 통신 인터페이스
- JavaScript
- level3
- 컴퓨터비전
- kotlin
- Stack
- 동적계획법
- 이분탐색
- 프로그래머스
- dfs
Archives
- Today
- Total
코드를 느껴바라
13549번 : 숨바꼭질 3 [JAVA] 본문
문제 링크
성공 여부(걸린 시간): 성공(14분 30초)
아이디어
일단 그래프 탐색을 통해서 수빈이가 동생을 최단 시간 안에 찾을 수 있도록 하려 했다.
그때 고민한 것은 DFS냐 BFS냐 였는데
DFS로 했을때는 시간이 depth이고 DFS를 수행했을때
일단 해당 시간대에 다른 성공 할 수 있는 경우는 뒷전이고
주구장창 막히거나 도착할때까지 쓸데없는 연산을 반복하게 됨으로
해당 문제에서 너비(time)를 우선적으로 탐색하여 앞선 시간에서 도착하면 끝낼 수 있는 효율적인 BFS로 작성을 해보았다.
수빈이가 이동하는 경우는
3가지이다.
- x->2x로 순간이동, 시간 추가 X
- x->x+1로 이동, 시간 +1
- x->x-1로 이동, 시간 -1
이때 주의할 것은
1번의 경우에는 시간이 추가되지 않음으로
2,3번 처럼 큐의 add를 통해 뒤쪽에 쌓아두면
더 긴 시간에서의 성공에 대한 정보를 획득하고 먼저 끝나버리는 문제가 발생함으로
addFirst로 큐의 앞에다 넣어준다.
그리고 각 이동별 x가 범위를 벗어나지 않게 + 해당 x로 도착했던 경우 중에 지금이 최고라면
q에 넣어주고 visited도 갱신해주도록 하면 끝이다.
풀이코드
import java.io.*;
import java.util.*;
public class Main {
public static void main(String[] args) throws Exception {
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());
int [] visited = new int[100001];
ArrayDeque<int []> q = new ArrayDeque<>();
Arrays.fill(visited, Integer.MAX_VALUE);
visited[N] = 0;
q.add(new int[]{N, 0});
while (!q.isEmpty()){
int [] cur = q.poll();
int loc = cur[0];
int time = cur[1];
if(loc==K){
System.out.print(time);
return;
}
if(loc*2<=100000 && visited[loc*2]>time){
q.addFirst(new int[]{loc*2, time});
visited[loc*2] = time;
}
if(loc+1<=100000&&visited[loc+1]>time+1){
q.addLast(new int[]{loc+1, time+1});
visited[loc+1] = time+1;
}
if(loc-1>=0&&visited[loc-1]>time+1){
q.addLast(new int[]{loc-1, time+1});
visited[loc-1] = time+1;
}
}
}
}반응형
'PS > 백준(Baekjoon)' 카테고리의 다른 글
| 1106번 : 호텔 [JAVA] (0) | 2025.10.31 |
|---|---|
| 14867번 : 물통 [JAVA] (0) | 2025.10.30 |
| 1956번 : 운동 [JAVA] (0) | 2025.10.27 |
| 2343번 : 기타 레슨 [JAVA] (0) | 2025.10.13 |
| 1092번 : 배 [JAVA] (0) | 2025.10.10 |
