반응형
Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 이진우의 손에 잡히는 경제
- 상한가 이유
- 경제뉴스 요약
- 백준
- java
- 급등 이유
- 상한가 분석
- 자바
- 테마주
- 상한가
- 손경제
- 알고리즘
- boj
- 파이썬
- 손에 잡히는 경제 요약
- Programmers
- 경제뉴스
- 주식 분석
- 코딩테스트
- 주식
- 이진우
- Python
- 프로그래머스
- 주식 상한가
- 급등주
- 손에 잡히는 경제
- 코테
- 손경제 요약
- 경제
- 급등주 분석
Archives
- Today
- Total
Completion over Perfection
백준 13549 - 숨바꼭질3 (JAVA 자바 풀이) 본문
반응형
https://www.acmicpc.net/problem/13549
<풀이방법>
1. 숨바꼭질1 처럼 방문처리를 한 뒤에 해당 좌표를 방문안하게 되면 안됩니다. 왜냐하면 2배로 점프뛰는 좌표는 이동시간이 0이 들기 때문에 최소 시간을 구하려면 반드시 갱신을 해주어야 합니다.
2. 다음에 이동할 좌표의 시간값이 이미 arr 배열에 들어있는 time값보다 작을 때만 큐에 넣어줍니다.
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
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
|
import java.io.*;
import java.util.*;
public class test {
static int N,K;
static int arr[];
public static void main(String args[]) throws Exception {
Scanner sc = new Scanner(System.in);
N = sc.nextInt(); // 5
K = sc.nextInt(); // 17
arr = new int[100002];
Arrays.fill(arr, 100000);
if (N == K) {
System.out.println("0");
return;
}
if (K < N) {
System.out.println(N - K);
return;
}
Queue<List> q = new LinkedList();
q.add(Arrays.asList(N,0)); // 5, 0 (현재위치, 소요시간)
int ans = Integer.MAX_VALUE;
while(!q.isEmpty()){
List out = q.poll(); // 5 , 0
int cur = (int) out.get(0); // 5
int time = (int) out.get(1); // 0
if (time > K) break;
arr[cur] = Math.min(arr[cur], time);
// 2를 곱했을 때, 1을 더했을 때, 1을 뺐을 때를 각각 q에 넣어준다
List nextP = Arrays.asList(cur+1, time+1);
List nextN = Arrays.asList(cur-1, time+1);
List next2X = Arrays.asList(cur*2, time);
// System.out.println("cur : " + cur + " | time : " + time + " | 다음+1 이동위치 : " + nextP.get(0) + " | 다음-1 이동위치 : " + nextN.get(0) + " | 2배 순간이동 위치 : " + next2X.get(0) + " | ans : " + ans);
if ((int)nextP.get(0) == K) {
ans = Math.min(ans, (int)nextP.get(1));
}
if ((int)nextN.get(0) == K) {
ans = Math.min(ans, (int)nextN.get(1));
}
if ((int)next2X.get(0) == K) {
ans = Math.min(ans, (int)next2X.get(1));
}
if ((int)nextP.get(0)<=K+1 && (int)nextP.get(1) < arr[(int)nextP.get(0)]) q.add(nextP); // 다음에 +1로 이동할 좌표가 K+1 범위이내에 있고, 다음에 이동할 좌표의 time값이 이미 arr 배열에 들어있는 time값보다 작을 때만 큐에 넣어준다.
if ((int)nextN.get(0)>=0 && (int)nextN.get(1) < arr[(int)nextN.get(0)]) q.add(nextN);
if ((int)next2X.get(0)<=K+1 && (int)next2X.get(1) < arr[(int)next2X.get(0)]) q.add(next2X);
}
System.out.println(ans);
}
}
|
cs |
반응형
'자바 (Java)' 카테고리의 다른 글
백준 3584 - 가장 가까운 공통 조상 (JAVA) (0) | 2024.01.18 |
---|---|
마이바티스 (MyBatis) 오라클 sql 오류 해결 (ORA-00933) (0) | 2023.05.02 |
백준 1697 - 숨바꼭질 (JAVA 자바 풀이) (0) | 2023.03.13 |
백준 2470 - 두 용액 (JAVA 자바 풀이) (0) | 2023.03.02 |
백준 1806 - 부분합 (자바 JAVA) (0) | 2023.02.25 |
Comments