Skip to content

Commit 30eb21c

Browse files
committed
백제완: [PG] 118669 등산코스 정하기_241213
1 parent 42ab1db commit 30eb21c

File tree

1 file changed

+46
-0
lines changed

1 file changed

+46
-0
lines changed

Programmers/Level3/JW_118669.java

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
import java.util.ArrayList;
2+
import java.util.Arrays;
3+
import java.util.HashSet;
4+
import java.util.PriorityQueue;
5+
class JW_118669 {
6+
public int[] solution(int n, int[][] paths, int[] gates, int[] summits) {
7+
ArrayList<ArrayList<int[]>> graph = new ArrayList<>();
8+
for (int i = 0; i < n + 1; i++)
9+
graph.add(new ArrayList<>());
10+
for (int[] path : paths) {
11+
graph.get(path[0]).add(new int[] { path[1], path[2] });
12+
graph.get(path[1]).add(new int[] { path[0], path[2] });
13+
}
14+
15+
HashSet<Integer> gateSet = new HashSet<>();
16+
HashSet<Integer> summitSet = new HashSet<>();
17+
for (int gate : gates)
18+
gateSet.add(gate);
19+
for (int summit : summits)
20+
summitSet.add(summit);
21+
22+
int[] result = { 0, Integer.MAX_VALUE };
23+
Arrays.sort(summits);
24+
for (int summit : summits) {
25+
PriorityQueue<int[]> pq = new PriorityQueue<>((o1, o2) -> o1[1] - o2[1]);
26+
boolean[] visited = new boolean[n + 1];
27+
pq.offer(new int[] { summit, 0 });
28+
while (!pq.isEmpty()) {
29+
int[] u = pq.poll();
30+
if (gateSet.contains(u[0])) {
31+
if (result[1] > u[1]) {
32+
result = new int[] { summit, u[1] };
33+
}
34+
break;
35+
}
36+
visited[u[0]] = true;
37+
for (int[] v : graph.get(u[0])) {
38+
if (!visited[v[0]] && !summitSet.contains(v[0])) {
39+
pq.offer(new int[] { v[0], Math.max(u[1], v[1]) });
40+
}
41+
}
42+
}
43+
}
44+
return result;
45+
}
46+
}

0 commit comments

Comments
 (0)