백준 - 13549 - 숨바꼭질3
2021. 3. 27. 00:12ㆍAlgorithm
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
|
import java.util.*;
/**
* 백준 - 13549
*/
public class 숨바꼭질3 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String[] inputs = sc.nextLine().split(" ");
int N = Integer.parseInt(inputs[0]);
int K = Integer.parseInt(inputs[1]);
System.out.println(dijkstra(N, K));
}
private static int dijkstra(int N, int K) {
Queue<Node> q = new PriorityQueue<>();
int[] dist = new int[100001];
Arrays.fill(dist, Integer.MAX_VALUE);
Node startNode = new Node();
startNode.nodeNum = N;
startNode.second = 0;
q.offer(startNode);
dist[N] = 0;
while (!q.isEmpty()) {
Node curNode = q.poll();
if(dist[curNode.nodeNum] < curNode.second) continue;
int[] nextPos = new int[]{curNode.nodeNum - 1, curNode.nodeNum + 1, curNode.nodeNum * 2};
for(int i=0; i<nextPos.length; i++) {
if(0 > nextPos[i] || nextPos[i] > 100000) continue;
Node nextNode = new Node();
nextNode.nodeNum = nextPos[i];
nextNode.second = (i == 0 || i == 1) ? 1 : 0;
if(dist[nextNode.nodeNum] > dist[curNode.nodeNum] + nextNode.second) {
q.offer(nextNode);
dist[nextNode.nodeNum] = dist[curNode.nodeNum] + nextNode.second;
}
}
}
return dist[K];
}
private static class Node implements Comparable<Node>{
private int nodeNum;
private int second;
@Override
public int compareTo(Node o) {
int ret = this.second - o.second;
if(ret == 0) {
ret = this.nodeNum - o.nodeNum;
}
return ret;
}
}
}
|
cs |
알고리즘
- 다익스트라
- 숨바꼭질, 숨바꼭질2와는 다르게 가중치가 다르기 때문에 다익스트라로 구현하였다.
- 다익스트라를 구현할 수 있으면 풀 수 있는 문제.
'Algorithm' 카테고리의 다른 글
프로그래머스 - 그래프 - 가장 먼 노드 (0) | 2021.03.29 |
---|---|
백준 - 13913 - 숨바꼭질4 (0) | 2021.03.27 |
백준 - 12851 - 숨바꼭질2 (0) | 2021.03.26 |
백준 - 1697 - 숨바꼭질 (0) | 2021.03.26 |
백준 - 2644 - 촌수계산 (0) | 2021.03.25 |