๐ข ๋ฑ์ฐ์ฝ์ค ์ ํ๊ธฐ
1. ๋ฌธ์ ๋งํฌ
2. ์ฝ๋
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
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
"""
๋ฑ์ฐ์ฝ์ค ์ ํ๊ธฐ
๐ ๋ฌธ์
XX์ฐ์ n๊ฐ์ ์ง์ ์ผ๋ก ์ด๋ฃจ์ด์ ธ ์์ต๋๋ค. ๊ฐ ์ง์ ์ 1๋ถํฐ n๊น์ง ๋ฒํธ๊ฐ ๋ถ์ด์์ผ๋ฉฐ,
์ถ์
๊ตฌ, ์ผํฐ, ํน์ ์ฐ๋ด์ฐ๋ฆฌ์
๋๋ค.
๊ฐ ์ง์ ์ ์๋ฐฉํฅ ํตํ์ด ๊ฐ๋ฅํ ๋ฑ์ฐ๋ก๋ก ์ฐ๊ฒฐ๋์ด ์์ผ๋ฉฐ, ์๋ก ๋ค๋ฅธ ์ง์ ์ ์ด๋ํ ๋
์ด ๋ฑ์ฐ๋ก๋ฅผ ์ด์ฉํด์ผ ํฉ๋๋ค. ์ด๋, ๋ฑ์ฐ๋ก๋ณ๋ก ์ด๋ํ๋๋ฐ ์ผ์ ์๊ฐ์ด ์์๋ฉ๋๋ค.
๋ฑ์ฐ์ฝ์ค๋ ๋ฐฉ๋ฌธํ ์ง์ ๋ฒํธ๋ค์ ์์๋๋ก ๋์ดํ์ฌ ํํํ ์ ์์ต๋๋ค.
์๋ฅผ ๋ค์ด 1-2-3-2-1 ์ผ๋ก ํํํ๋ ๋ฑ์ฐ์ฝ์ค๋ 1๋ฒ์ง์ ์์ ์ถ๋ฐํ์ฌ 2๋ฒ, 3๋ฒ, 2๋ฒ, 1๋ฒ ์ง์ ์ ์์๋๋ก ๋ฐฉ๋ฌธํ๋ค๋ ๋ป์
๋๋ค.
๋ฑ์ฐ์ฝ์ค๋ฅผ ๋ฐ๋ผ ์ด๋ํ๋ ์ค ์ผํฐ ํน์ ์ฐ๋ด์ฐ๋ฆฌ๋ฅผ ๋ฐฉ๋ฌธํ ๋๋ง๋ค ํด์์ ์ทจํ ์ ์์ผ๋ฉฐ,
ํด์ ์์ด ์ด๋ํด์ผ ํ๋ ์๊ฐ ์ค ๊ฐ์ฅ ๊ธด ์๊ฐ์ ํด๋น ๋ฑ์ฐ์ฝ์ค์ intensity๋ผ๊ณ ๋ถ๋ฅด๊ธฐ๋ก ํฉ๋๋ค.
๋น์ ์ XX์ฐ์ ์ถ์
๊ตฌ ์ค ํ ๊ณณ์์ ์ถ๋ฐํ์ฌ ์ฐ๋ด์ฐ๋ฆฌ ์ค ํ ๊ณณ๋ง ๋ฐฉ๋ฌธํ ๋ค
๋ค์ ์๋์ ์ถ์
๊ตฌ๋ก ๋์์ค๋ ๋ฑ์ฐ์ฝ์ค๋ฅผ ์ ํ๋ ค๊ณ ํฉ๋๋ค.
๋ค์ ๋งํด, ๋ฑ์ฐ์ฝ์ค์์ ์ถ์
๊ตฌ๋ ์ฒ์๊ณผ ๋์ ํ ๋ฒ์ฉ, ์ฐ๋ด์ฐ๋ฆฌ๋ ํ ๋ฒ๋ง ํฌํจ๋์ด์ผ ํฉ๋๋ค.
๋น์ ์ ์ด๋ฌํ ๊ท์น์ ์งํค๋ฉด์ intensity๊ฐ ์ต์๊ฐ ๋๋๋ก ๋ฑ์ฐ์ฝ์ค๋ฅผ ์ ํ๋ ค๊ณ ํฉ๋๋ค.
XX์ฐ์ ์ง์ ์ n, ๊ฐ ๋ฑ์ฐ๋ก์ ์ ๋ณด๋ฅผ ๋ด์ 2์ฐจ์ ์ ์ ๋ฐฐ์ด paths,
์ถ์
๊ตฌ๋ค์ ๋ฒํธ๊ฐ ๋ด๊ธด ์ ์ ๋ฐฐ์ด gates, ์ฐ๋ด์ฐ๋ฆฌ๋ค์ ๋ฒํธ๊ฐ ๋ด๊ธด ์ ์ ๋ฐฐ์ด summits๊ฐ ๋งค๊ฐ๋ณ์๋ก ์ฃผ์ด์ง๋๋ค.
์ด๋, intensity๊ฐ ์ต์๊ฐ ๋๋ ๋ฑ์ฐ์ฝ์ค์ ํฌํจ๋ ์ฐ๋ด์ฐ๋ฆฌ ๋ฒํธ์ intensity์ ์ต์๊ฐ์ ์ฐจ๋ก๋๋ก
์ ์ ๋ฐฐ์ด์ ๋ด์ return ํ๋๋ก solution ํจ์๋ฅผ ์์ฑํด์ฃผ์ธ์.
intensity๊ฐ ์ต์๊ฐ ๋๋ ๋ฑ์ฐ์ฝ์ค๊ฐ ์ฌ๋ฌ ๊ฐ๋ผ๋ฉด ๊ทธ์ค ์ฐ๋ด์ฐ๋ฆฌ์ ๋ฒํธ๊ฐ ๊ฐ์ฅ ๋ฎ์ ๋ฑ์ฐ์ฝ์ค๋ฅผ ์ ํํฉ๋๋ค.
๐งก ์ ํ ์ฌํญ
2 โค n โค 50,000
n - 1 โค paths์ ๊ธธ์ด โค 200,000
paths์ ์์๋ [i, j, w] ํํ์
๋๋ค.
i๋ฒ ์ง์ ๊ณผ j๋ฒ ์ง์ ์ ์ฐ๊ฒฐํ๋ ๋ฑ์ฐ๋ก๊ฐ ์๋ค๋ ๋ป์
๋๋ค.
w๋ ๋ ์ง์ ์ฌ์ด๋ฅผ ์ด๋ํ๋ ๋ฐ ๊ฑธ๋ฆฌ๋ ์๊ฐ์
๋๋ค.
1 โค i < j โค n
1 โค w โค 10,000,000
์๋ก ๋ค๋ฅธ ๋ ์ง์ ์ ์ง์ ์ฐ๊ฒฐํ๋ ๋ฑ์ฐ๋ก๋ ์ต๋ 1๊ฐ์
๋๋ค.
1 โค gates์ ๊ธธ์ด โค n
1 โค gates์ ์์ โค n
gates์ ์์๋ ํด๋น ์ง์ ์ด ์ถ์
๊ตฌ์์ ๋ํ๋
๋๋ค.
1 โค summits์ ๊ธธ์ด โค n
1 โค summits์ ์์ โค n
summits์ ์์๋ ํด๋น ์ง์ ์ด ์ฐ๋ด์ฐ๋ฆฌ์์ ๋ํ๋
๋๋ค.
์ถ์
๊ตฌ์ด๋ฉด์ ๋์์ ์ฐ๋ด์ฐ๋ฆฌ์ธ ์ง์ ์ ์์ต๋๋ค.
gates์ summits์ ๋ฑ์ฅํ์ง ์์ ์ง์ ์ ๋ชจ๋ ์ผํฐ์
๋๋ค.
์์์ ๋ ์ง์ ์ฌ์ด์ ์ด๋ ๊ฐ๋ฅํ ๊ฒฝ๋ก๊ฐ ํญ์ ์กด์ฌํฉ๋๋ค.
return ํ๋ ๋ฐฐ์ด์ [์ฐ๋ด์ฐ๋ฆฌ์ ๋ฒํธ, intensity์ ์ต์๊ฐ] ์์์ฌ์ผ ํฉ๋๋ค.
๐ ์
์ถ๋ ฅ
n paths gates summits result
6 [[1, 2, 3], [2, 3, 5], [2, 4, 2], [2, 5, 4], [3, 4, 4], [4, 5, 3], [4, 6, 1], [5, 6, 1]] [1, 3] [5] [5, 3]
7 [[1, 4, 4], [1, 6, 1], [1, 7, 3], [2, 5, 2], [3, 7, 4], [5, 6, 6]] [1] [2, 3, 4] [3, 4]
7 [[1, 2, 5], [1, 4, 1], [2, 3, 1], [2, 6, 7], [4, 5, 1], [5, 6, 1], [6, 7, 1]] [3, 7] [1, 5] [5, 1]
5 [[1, 3, 10], [1, 4, 20], [2, 3, 4], [2, 4, 6], [3, 5, 20], [4, 5, 6]] [1, 2] [5] [5, 6]
"""
# XX์ฐ์ ์ง์ ์ n, ๊ฐ ๋ฑ์ฐ๋ก์ ์ ๋ณด๋ฅผ ๋ด์ 2์ฐจ์ ์ ์ ๋ฐฐ์ด paths,
# ์ถ์
๊ตฌ๋ค์ ๋ฒํธ๊ฐ ๋ด๊ธด ์ ์ ๋ฐฐ์ด gates, ์ฐ๋ด์ฐ๋ฆฌ๋ค์ ๋ฒํธ๊ฐ ๋ด๊ธด ์ ์ ๋ฐฐ์ด summits
import heapq
def solution(n, paths, gates, summits):
graph = [[] for _ in range(n + 1)]
# i๋ฒ ์ง์ ๊ณผ j๋ฒ ์ง์ ์ ์ฐ๊ฒฐํ๋ ๋ฑ์ฐ๋ก๊ฐ ์๋ค
# w๋ ๋ ์ง์ ์ฌ์ด๋ฅผ ์ด๋ํ๋ ๋ฐ ๊ฑธ๋ฆฌ๋ ์๊ฐ
for i, j, w in paths:
graph[i].append([j, w])
graph[j].append([i, w])
visited = [False] * (n + 1)
for summit in summits:
visited[summit] = True
max_int = 1e9
distance = [max_int] * (n + 1)
temp = []
# ์ถ์
๊ตฌ๋ค์ ๋ฒํธ๊ฐ ๋ด๊ธด ์ ์ ๋ฐฐ์ด
for gate in gates:
distance[gate] = 0
heapq.heappush(temp, [0, gate])
# ํด์ ์์ด ์ด๋ํด์ผ ํ๋ ์๊ฐ ์ค ๊ฐ์ฅ ๊ธด ์๊ฐ์ ํด๋น ๋ฑ์ฐ์ฝ์ค์ intensit
# ๋ฑ์ฐ์ฝ์ค์์ ์ถ์
๊ตฌ๋ ์ฒ์๊ณผ ๋์ ํ ๋ฒ์ฉ, ์ฐ๋ด์ฐ๋ฆฌ๋ ํ ๋ฒ๋ง ํฌํจ
# intensity๊ฐ ์ต์๊ฐ ๋๋๋ก ๋ฑ์ฐ์ฝ์ค๋ฅผ ์ ํ๊ธฐ
while temp:
d, i = heapq.heappop(temp)
# ์ฐ๋ด์ฐ๋ฆฌ๋ฉด continue
if distance[i] < d or visited[i]:
continue
for j, dd in graph[i]:
dd = max(distance[i], dd)
if distance[j] > dd:
distance[j] = dd
heapq.heappush(temp, [dd, j])
result = [-1, max_int]
for summit in sorted(summits):
if distance[summit] < result[1]:
result[0] = summit
result[1] = distance[summit]
# [์ฐ๋ด์ฐ๋ฆฌ์ ๋ฒํธ, intensity์ ์ต์๊ฐ]
return result
์ ํ์ฑ
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
ํ ์คํธ 1 ใ ํต๊ณผ (0.02ms, 10.1MB) ํ ์คํธ 2 ใ ํต๊ณผ (0.05ms, 10.5MB) ํ ์คํธ 3 ใ ํต๊ณผ (0.02ms, 10.1MB) ํ ์คํธ 4 ใ ํต๊ณผ (0.02ms, 10.3MB) ํ ์คํธ 5 ใ ํต๊ณผ (0.02ms, 10.3MB) ํ ์คํธ 6 ใ ํต๊ณผ (0.10ms, 10.3MB) ํ ์คํธ 7 ใ ํต๊ณผ (0.15ms, 10.1MB) ํ ์คํธ 8 ใ ํต๊ณผ (0.08ms, 10.4MB) ํ ์คํธ 9 ใ ํต๊ณผ (0.25ms, 10.3MB) ํ ์คํธ 10 ใ ํต๊ณผ (0.31ms, 10.4MB) ํ ์คํธ 11 ใ ํต๊ณผ (0.27ms, 10.1MB) ํ ์คํธ 12 ใ ํต๊ณผ (0.35ms, 10.2MB) ํ ์คํธ 13 ใ ํต๊ณผ (6.70ms, 11.7MB) ํ ์คํธ 14 ใ ํต๊ณผ (70.21ms, 20.9MB) ํ ์คํธ 15 ใ ํต๊ณผ (675.26ms, 80.7MB) ํ ์คํธ 16 ใ ํต๊ณผ (768.15ms, 83.1MB) ํ ์คํธ 17 ใ ํต๊ณผ (691.59ms, 83.3MB) ํ ์คํธ 18 ใ ํต๊ณผ (29.58ms, 16MB) ํ ์คํธ 19 ใ ํต๊ณผ (266.96ms, 36.4MB) ํ ์คํธ 20 ใ ํต๊ณผ (691.40ms, 77.6MB) ํ ์คํธ 21 ใ ํต๊ณผ (962.79ms, 73.3MB) ํ ์คํธ 22 ใ ํต๊ณผ (39.48ms, 15.2MB) ํ ์คํธ 23 ใ ํต๊ณผ (226.51ms, 32.5MB) ํ ์คํธ 24 ใ ํต๊ณผ (117.11ms, 27.6MB) ํ ์คํธ 25 ใ ํต๊ณผ (1184.18ms, 95.1MB)
3. ํด์ค
1
2
3
4
5
- ๊ทธ๋ํ๋ฅผ ์ด์ฉํจ
- ๊ฐ ์์น์ ๋ํด ๋๋ฌํ๊ธฐ ์ํ ์ต์ ๊ฐ์ค์น๋ฅผ ๊ตฌํด์ผํจ
- ๋ค์ต์คํธ๋ผ๋ฅผ ํตํด max ์ฐ์ฐ์ผ๋ก ๊ฐ์ค์น๋ฅผ ๊ฐฑ์ ํ๋ค
- ๋ ๊ฐ ์ด์ ์ฐ๋ด์ฐ๋ฆฌ ๋ฐฉ๋ฌธ X
- ์ฐ๋ด์ฐ๋ฆฌ ์ฒดํฌ๋ฅผ ์ ํ๋๋ก!
This post is licensed under CC BY 4.0 by the author.