Skip to content

Commit 45e2e8e

Browse files
authored
Merge branch 'AlgorithmStudy-Allumbus:main' into main
2 parents fd58985 + 7a6e4e3 commit 45e2e8e

20 files changed

+705
-0
lines changed
Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
"""
2+
[BOJ]_4485 ๋…น์ƒ‰ ์˜ท ์ž…์€ ์• ๊ฐ€ ์ ค๋‹ค์ง€?_Gold4
3+
https://solved.ac/problems/tags/dijkstra?sort=solved&direction=desc&page=1
4+
#์œ ํ˜• : Dijkstra
5+
#์ œ์ถœ๋‚ ์งœ : 01.27.2025
6+
7+
https://velog.io/@victoriapasta/BOJ-4485-%EB%85%B9%EC%83%89-%EC%98%B7-%EC%9E%85%EC%9D%80-%EC%95%A0%EA%B0%80-%EC%A0%A4%EB%8B%A4%EC%A7%80
8+
"""
9+
"""
10+
11+
12+
"""
13+
import sys
14+
import heapq
15+
16+
input = sys.stdin.readline
17+
18+
n = int(input())
19+
dx = [0, 1, -1, 0]
20+
dy = [1, 0, 0, -1]
21+
# ์ •๋‹ต ์ถœ๋ ฅ์„ ์œ„ํ•œ cnt ๋ณ€์ˆ˜
22+
cnt = 0
23+
# n์ด 0์ด๋ฉด ์ข…๋ฃŒ
24+
while n != 0:
25+
cnt += 1
26+
# ์ž…๋ ฅ
27+
board = [list(map(int, input().split())) for _ in range(n)]
28+
# ์ตœ์†Œ ๋น„์šฉ์œผ๋กœ ์ •๋ ฌํ•ด ์ค„ heap queue (์ด๊ฒƒ์„ ๊ธฐ์ค€์œผ๋กœ ํƒ์ƒ‰)
29+
heap = []
30+
# ๊ฐ€์ค‘์น˜๋ฅผ ์ €์žฅํ•ด์ค„ distance ํ…Œ์ด๋ธ”
31+
dist = [[1e9] * n for _ in range(n)]
32+
# [0][0]๋ถ€ํ„ฐ ์‹œ์ž‘
33+
dist[0][0] = board[0][0]
34+
heapq.heappush(heap, (board[0][0], 0, 0))
35+
36+
while heap:
37+
distance, y, x = heapq.heappop(heap)
38+
39+
#์ตœ์†Œ ๊ฐ€์ค‘์น˜๋ฅผ ๋จผ์ € ๊ฐ€๊ธฐ ๋•Œ๋ฌธ์— [N-1][N-1]์— ๋„์ฐฉํ•˜๋ฉด ๋ฐ”๋กœ ๋ฆฌํ„ด
40+
if y == n-1 and x == n-1:
41+
print("Problem", str(cnt)+":", distance)
42+
# n ๋ณ€์ˆ˜ ๋‹ค์‹œ ๋ฐ›๊ณ  break
43+
n = int(input())
44+
break
45+
# ์ƒํ•˜์ขŒ์šฐ ๋ฐฉํ–ฅ ํƒ์ƒ‰
46+
for i in range(4):
47+
ny = y + dy[i]
48+
nx = x + dx[i]
49+
50+
if 0 <= ny < n and 0 <= nx < n:
51+
cost = distance + board[ny][nx]
52+
# ์ด๋ฏธ ์ €์žฅ๋œ ๊ฐ€์ค‘์น˜๋ณด๋‹ค ํ˜„์žฌ ๊ฐ€์ค‘์น˜๊ฐ€ ๋‚ฎ์œผ๋ฉด ์—…๋ฐ์ดํŠธ
53+
if dist[ny][nx] > cost:
54+
dist[ny][nx] = distance + board[ny][nx]
55+
heapq.heappush(heap, (distance + board[ny][nx], ny, nx))
Lines changed: 77 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,77 @@
1+
"""
2+
3+
https://www.acmicpc.net/problem/1238
4+
5+
goal : ๊ฐ N ๊ฐœ์˜ ๋งˆ์„์—์„œ X (๋žœ๋ค)์„ ์™•๋ณตํ•˜๋Š” ์ตœ๋‹จ ๊ฑฐ๋ฆฌ ๊ณ„์‚ฐ -> ์ตœ๋Œ€๊ฐ’ ๋ฐ˜ํ™˜
6+
- ์กฐ๊ฑด
7+
1. ๋‹จ๋ฐฉํ–ฅ M๊ฐœ์˜ ๊ธธ : root
8+
2. ์™•๋ณต ์ตœ๋‹จ ๊ฑฐ๋ฆฌ ๊ณ ๋ ค
9+
(1) ๊ฐœ๋ณ„ N ๊ฐœ -> X ์ตœ๋‹จ ๊ฑฐ๋ฆฌ
10+
(2) X -> ๊ฐœ๋ณ„ N ๊ฐœ ์ตœ๋‹จ ๊ฑฐ๋ฆฌ
11+
์˜ ์ดํ•ฉ ์ค‘ ์ตœ๋Œ€๊ฐ’
12+
13+
3. ์™•๋ณต ๊ธธ์€ ๊ฐ™์•„๋„, ๋‹ฌ๋ผ๋„ ์ƒ๊ด€ ์—†์Œ -> ๋‹จ๋ฐฉํ–ฅ์ด๋ผ ์งœํ”ผ ๋‹ค๋ฅธ ๋ฃจํŠธ ์‚ฌ์šฉ
14+
15+
- ์œ ํ˜• : ํ’€์ด 2๊ฐ€์ง€ ์žˆ์Œ
16+
1. ๋‹ค์ต์ŠคํŠธ๋ผ
17+
2 .ํ”Œ๋กœ์ด๋“œ ์›Œ์ƒฌ
18+
19+
FLOW
20+
(1) ๊ฐœ๋ณ„ N ๊ฐœ -> X ์ตœ๋‹จ ๊ฑฐ๋ฆฌ
21+
(2) X -> ๊ฐœ๋ณ„ N ๊ฐœ ์ตœ๋‹จ ๊ฑฐ๋ฆฌ
22+
23+
"""
24+
import sys
25+
import heapq
26+
# 1. ์ธ์ ‘ ๋ฆฌ์ŠคํŠธ field ๋งŒ๋“ค๊ธฐ (๋‹จ๋ฐฉํ–ฅ)
27+
input = sys.stdin.readline
28+
INF = int(1e9) #1<=Time<=100
29+
N , M , start_town = map(int , input().split()) # ์‹œ์ž‘ note
30+
# ๊ฐ road (edge)์™€ Time ์ •๋ณต๊ฐ€ ๋‹ด๊น€ ๋ฆฌ์ŠคํŠธ ๋งŒ๋“ค๊ธฐ
31+
field = [[] for _ in range(N+1) ] # idx : 1~ N+1
32+
#๋ฌดํ•œ์œผ๋กœ ์ตœ๋‹จ ๊ฑฐ๋ฆฌ ํ…Œ์ด๋ธ” ์ดˆ๊ธฐํ™”
33+
to_X_distance = [ [INF for _ in range(N+1)] for k in range(N+1)]
34+
# 1-2. ๋ชจ๋“  road ๋ฐ time ์ •๋ณด ๋ฐ›๊ธฐ
35+
36+
for m in range(M) :
37+
start , end , time = map(int, input().split())
38+
field[start].append((end, time))
39+
40+
41+
# ๋‹ค์ต์ŠคํŠธ๋ผ
42+
def dijkstra(start , distance ) :
43+
q = [] # ์šฐ์„ ์ˆœ์œ„ ํ
44+
#1. ์‹œ์ž‘ ๋…ธ๋“œ์— ๋Œ€ํ•ด ์ตœ๋‹จ๊ฒฝ๋กœ = 0 , ํ ์‚ฝ์ž…(์‹œ๊ฐ„ = 0 , ๋…ธ๋“œ)
45+
heapq.heappush(q , (0,start))
46+
distance[start] = 0
47+
#2. q๊ฐ€ ๋น„์–ด ์žˆ๊ธฐ ์ „๊นŒ์ง€
48+
while q :
49+
# ๊ฐ€์žฅ ์ตœ๋‹จ ๊ฑฐ๋ฆฌ ์งง์€ ๋…ธ๋“œ์— ๋Œ€ํ•œ ์ •๋ณด ์ถ”์ถœ
50+
time , now = heapq.heappop(q) # A -> now(์ค‘๊ฐ„)
51+
# ํ˜„์žฌ ๋…ธ๋“œ๊ฐ€ ์ด๋ฏธ ์ฒ˜๋ฆฌ = ๋ฐฉ๋ฌธ ์—ฌ๋ถ€ ํ™•์ธ
52+
if distance[now] < time :
53+
continue
54+
# ํ˜„์žฌ ๋…ธ๋“œ์™€ ์—ฐ๊ฒฐ๋œ ๋‹ค๋ฅธ ์ธ์ ‘ ๋…ธ๋“œ ํ™•์ธ
55+
for near_road , near_time in field[now] :
56+
duration = near_time + time # A -> now -> B
57+
#๊ธฐ์กด ๋ฐฉ๋ฒ• ๋ณด๋‹ค ํ˜„์žฌ ๋…ธ๋“œ ๊ฒฝ์œ ํ•ด์„œ ๊ฐˆ๋•Œ ์‹œ๊ฐ„์ด ์ ๊ฒŒ ๊ฑธ๋ฆด๋•Œ
58+
# ํ ์‚ฝ์ž… & ์ตœ๋‹จ๊ฑฐ๋ฆฌ ํ…Œ์ด๋ธ” ์—…๋ฐ์ดํŠธ
59+
if duration < distance[near_road] :
60+
distance[near_road] = duration # ์—…๋ฐ์ดํŠธ
61+
heapq.heappush(q , (duration , near_road)) # ํ์— ๋„ฃ๊ธฐ
62+
63+
return distance
64+
65+
# N-1 ๋ฒˆ ๋‹ค์ต์ŠคํŠธ๋ผ ์ˆ˜ํ–‰
66+
for i in range(1,N+1) :
67+
to_X_distance[i] = dijkstra(i,to_X_distance[i] )
68+
69+
# 1. X -> N ๋Œ์–ด๊ฐ
70+
# go_X_distance = to_X_distance[start_town]
71+
72+
# 2. N ->X ๋กœ ์ถœ๋ฐœ
73+
result = [0 for _ in range(N+1)]
74+
for town in range(1,N+1):
75+
result[town] = to_X_distance[town][start_town] + to_X_distance[start_town][town] # {twon -> x} + {x-> town} : ๊ฐ ๋งˆ์„๋ณ„ ์™•๋ณต ์ตœ๋‹จ ์‹œ๊ฐ„
76+
77+
print(max(result))
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
'''
2+
BOJ #4485. ๋…น์ƒ‰ ์˜ท ์ž…์€ ์• ๊ฐ€ ์ ค๋‹ค์ง€?(๊ณจ๋“œ4)
3+
https://www.acmicpc.net/problem/4485
4+
#์œ ํ˜• : Dijkstra
5+
'''
6+
import sys
7+
import heapq
8+
9+
input = sys.stdin.readline
10+
11+
n = int(input())
12+
dx = [0, 1, -1, 0]
13+
dy = [1, 0, 0, -1]
14+
# ์ •๋‹ต ์ถœ๋ ฅ์„ ์œ„ํ•œ cnt ๋ณ€์ˆ˜
15+
cnt = 0
16+
# n์ด 0์ด๋ฉด ์ข…๋ฃŒ
17+
while n != 0:
18+
cnt += 1
19+
# ์ž…๋ ฅ
20+
board = [list(map(int, input().split())) for _ in range(n)]
21+
# ์ตœ์†Œ ๋น„์šฉ์œผ๋กœ ์ •๋ ฌํ•ด ์ค„ heap queue (์ด๊ฒƒ์„ ๊ธฐ์ค€์œผ๋กœ ํƒ์ƒ‰)
22+
heap = []
23+
# ๊ฐ€์ค‘์น˜๋ฅผ ์ €์žฅํ•ด์ค„ distance ํ…Œ์ด๋ธ”
24+
dist = [[1e9] * n for _ in range(n)]
25+
# [0][0]๋ถ€ํ„ฐ ์‹œ์ž‘
26+
dist[0][0] = board[0][0]
27+
heapq.heappush(heap, (board[0][0], 0, 0))
28+
29+
while heap:
30+
distance, y, x = heapq.heappop(heap)
31+
32+
#์ตœ์†Œ ๊ฐ€์ค‘์น˜๋ฅผ ๋จผ์ € ๊ฐ€๊ธฐ ๋•Œ๋ฌธ์— [N-1][N-1]์— ๋„์ฐฉํ•˜๋ฉด ๋ฐ”๋กœ ๋ฆฌํ„ด
33+
if y == n-1 and x == n-1:
34+
print("Problem", str(cnt)+":", distance)
35+
# n ๋ณ€์ˆ˜ ๋‹ค์‹œ ๋ฐ›๊ณ  break
36+
n = int(input())
37+
break
38+
# ์ƒํ•˜์ขŒ์šฐ ๋ฐฉํ–ฅ ํƒ์ƒ‰
39+
for i in range(4):
40+
ny = y + dy[i]
41+
nx = x + dx[i]
42+
43+
if 0 <= ny < n and 0 <= nx < n:
44+
cost = distance + board[ny][nx]
45+
# ์ด๋ฏธ ์ €์žฅ๋œ ๊ฐ€์ค‘์น˜๋ณด๋‹ค ํ˜„์žฌ ๊ฐ€์ค‘์น˜๊ฐ€ ๋‚ฎ์œผ๋ฉด ์—…๋ฐ์ดํŠธ
46+
if dist[ny][nx] > cost:
47+
dist[ny][nx] = distance + board[ny][nx]
48+
heapq.heappush(heap, (distance + board[ny][nx], ny, nx))
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
## ๐Ÿš€ 1์›” 5์ฃผ์ฐจ (01/20) ์Šคํ„ฐ๋”” ๋ฐœ์ œ ์ฃผ์ œ: Dijkstra
2+
> ๋ฐœ์ œ์ž: ๊น€ํ™์ฃผ
3+
4+
### ๐Ÿ—‚๏ธ ์Šคํ„ฐ๋”” ์ž๋ฃŒ
5+
- PDF: [๋ฐ”๋กœ๊ฐ€๊ธฐ](./Study_BOJ_1238.pdf)
6+
![image]()
7+
8+
9+
### ๐Ÿ“– ๋ฌธ์ œ
10+
- [๋ฐฑ์ค€ #1238. ํŒŒํ‹ฐ](https://www.acmicpc.net/problem/1238): ๋‹ค์ต์ŠคํŠธ๋ผ / ๊ณจ๋“œ3
11+
- ์ •๋‹ต ์ฝ”๋“œ: [Study_BOJ_1253_์ข‹๋‹ค.py](./Study_BOJ_1253_์ข‹๋‹ค.py)
12+
13+
### ๐Ÿ’ป ๊ณผ์ œ
14+
- [๋ฐฑ์ค€ #4485. ๋…น์ƒ‰ ์˜ท ์ž…์€ ์• ๊ฐ€ ์ ค๋‹ค์ง€?](https://www.acmicpc.net/problem/4485): ๋‹ค์ต์ŠคํŠธ๋ผ / ๊ณจ๋“œ4
15+
- ์ •๋‹ต ์ฝ”๋“œ: [Assignment_BOJ_4485_๋…น์ƒ‰ ์˜ท ์ž…์€์• ๊ฐ€ ์ ค๋‹ค์ง€.py](./Assignment_BOJ_4485_๋…น์ƒ‰์˜ท์ž…์€์• ๊ฐ€์ ค๋‹ค์ง€.py)
444 KB
Binary file not shown.
Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
"""
2+
BOJ #1238. ํŒŒํ‹ฐ (๊ณจ๋“œ3)
3+
https://www.acmicpc.net/problem/1238
4+
์œ ํ˜•: Dijkstra
5+
"""
6+
7+
import sys
8+
import heapq
9+
# 1. ์ธ์ ‘ ๋ฆฌ์ŠคํŠธ field ๋งŒ๋“ค๊ธฐ (๋‹จ๋ฐฉํ–ฅ)
10+
input = sys.stdin.readline
11+
INF = int(1e9) #1<=Time<=100
12+
N , M , start_town = map(int , input().split()) # ์‹œ์ž‘ note
13+
# ๊ฐ road (edge)์™€ Time ์ •๋ณต๊ฐ€ ๋‹ด๊น€ ๋ฆฌ์ŠคํŠธ ๋งŒ๋“ค๊ธฐ
14+
field = [[] for _ in range(N+1) ] # idx : 1~ N+1
15+
#๋ฌดํ•œ์œผ๋กœ ์ตœ๋‹จ ๊ฑฐ๋ฆฌ ํ…Œ์ด๋ธ” ์ดˆ๊ธฐํ™”
16+
to_X_distance = [ [INF for _ in range(N+1)] for k in range(N+1)]
17+
18+
# 1-2. ๋ชจ๋“  road ๋ฐ time ์ •๋ณด ๋ฐ›๊ธฐ
19+
for m in range(M) :
20+
start , end , time = map(int, input().split())
21+
field[start].append((end, time))
22+
23+
24+
# ๋‹ค์ต์ŠคํŠธ๋ผ
25+
def dijkstra(start , distance ) :
26+
q = [] # ์šฐ์„ ์ˆœ์œ„ ํ
27+
#1. ์‹œ์ž‘ ๋…ธ๋“œ์— ๋Œ€ํ•ด ์ตœ๋‹จ๊ฒฝ๋กœ = 0 , ํ ์‚ฝ์ž…(์‹œ๊ฐ„ = 0 , ๋…ธ๋“œ)
28+
heapq.heappush(q , (0,start))
29+
distance[start] = 0
30+
#2. q๊ฐ€ ๋น„์–ด ์žˆ๊ธฐ ์ „๊นŒ์ง€
31+
while q :
32+
# ๊ฐ€์žฅ ์ตœ๋‹จ ๊ฑฐ๋ฆฌ ์งง์€ ๋…ธ๋“œ์— ๋Œ€ํ•œ ์ •๋ณด ์ถ”์ถœ
33+
time , now = heapq.heappop(q) # A -> now(์ค‘๊ฐ„)
34+
# ํ˜„์žฌ ๋…ธ๋“œ๊ฐ€ ์ด๋ฏธ ์ฒ˜๋ฆฌ = ๋ฐฉ๋ฌธ ์—ฌ๋ถ€ ํ™•์ธ
35+
if distance[now] < time :
36+
continue
37+
# ํ˜„์žฌ ๋…ธ๋“œ์™€ ์—ฐ๊ฒฐ๋œ ๋‹ค๋ฅธ ์ธ์ ‘ ๋…ธ๋“œ ํ™•์ธ
38+
for near_road , near_time in field[now] :
39+
duration = near_time + time # A -> now -> B
40+
#๊ธฐ์กด ๋ฐฉ๋ฒ• ๋ณด๋‹ค ํ˜„์žฌ ๋…ธ๋“œ ๊ฒฝ์œ ํ•ด์„œ ๊ฐˆ๋•Œ ์‹œ๊ฐ„์ด ์ ๊ฒŒ ๊ฑธ๋ฆด๋•Œ
41+
# ํ ์‚ฝ์ž… & ์ตœ๋‹จ๊ฑฐ๋ฆฌ ํ…Œ์ด๋ธ” ์—…๋ฐ์ดํŠธ
42+
if duration < distance[near_road] :
43+
distance[near_road] = duration # ์—…๋ฐ์ดํŠธ
44+
heapq.heappush(q , (duration , near_road)) # ํ์— ๋„ฃ๊ธฐ
45+
46+
return distance
47+
48+
# 1. N-1 ๋ฒˆ ๋‹ค์ต์ŠคํŠธ๋ผ ์ˆ˜ํ–‰ -> 2์ฐจ์› ์ตœ๋‹จ ๊ฑฐ๋ฆฌ ๋ฆฌ์ŠคํŠธ ๋งŒ๋“ฆ
49+
for i in range(1,N+1) :
50+
to_X_distance[i] = dijkstra(i,to_X_distance[i] )
51+
52+
#2. ๊ฐ ๋งˆ์„๋ณ„ ์™•๋ณต ์ตœ๋‹จ ์‹œ๊ฐ„ ๊ณ„์‚ฐ :{twon -> x} + {x-> town}
53+
result = [0 for _ in range(N+1)]
54+
for town in range(1,N+1):
55+
result[town] = to_X_distance[town][start_town] + to_X_distance[start_town][town]
56+
57+
print(max(result))
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
'''
2+
BOJ #19638. ์„ผํ‹ฐ์™€ ๋งˆ๋ฒ•์˜ ๋ฟ…๋ง์น˜ (์‹ค๋ฒ„1)
3+
https://www.acmicpc.net/problem/19638
4+
์œ ํ˜•: Priority Queue, Data Structure
5+
'''
6+
7+
# ๊ณผ์ œ ๋ฌธ์ œ์˜ ๋‹ต์€ PR ์˜ฌ๋ฆฌ๋Š” ๋‚ ์— ํ•จ๊ป˜ ์˜ฌ๋ผ๊ฐˆ ์˜ˆ์ •์ž…๋‹ˆ๋‹ค.
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
## ๐Ÿš€2์›” 1์ฃผ์ฐจ (2/3) ์Šคํ„ฐ๋”” ๋ฐœ์ œ ์ฃผ์ œ: Dynamic Programming - Tree
2+
> ๋ฐœ์ œ์ž: ๊น€๋ฏผ์ • (@Mingguriguri)
3+
4+
> ์ฃผ์ œ: Priority Queue
5+
### ๐Ÿ—‚๏ธ ์Šคํ„ฐ๋”” ์ž๋ฃŒ
6+
- PDF: [๋ฐ”๋กœ๊ฐ€๊ธฐ
7+
](./Study_BOJ_1202.pdf)
8+
9+
<img width="500" alt="์Šคํ„ฐ๋””๋ฌธ์ œ" src="https://github.com/user-attachments/assets/96863997-1cfd-454b-b1b0-634606cc4108" /> <img width="500" alt="๋ฐœ์ œ๋ฌธ์ œ" src="https://github.com/user-attachments/assets/10717940-e761-4a5c-8cf0-e75935d84633" />
10+
11+
### ๐Ÿ“– ๋ฌธ์ œ
12+
- [๋ฐฑ์ค€ #1202. ๋ณด์„ ๋„๋‘‘](https://www.acmicpc.net/problem/1202): Priority Queue, ์ž๋ฃŒ๊ตฌ์กฐ / ๊ณจ๋“œ2
13+
- ์ •๋‹ต ์ฝ”๋“œ: [Study_BOJ_1202_๋ณด์„๋„๋‘‘.py](./Study_BOJ_1202_๋ณด์„๋„๋‘‘.py)
14+
15+
### ๐Ÿ’ป ๊ณผ์ œ
16+
- [๋ฐฑ์ค€ #19638. ์„ผํ‹ฐ์™€ ๋งˆ๋ฒ•์˜ ๋ฟ…๋ง์น˜](https://www.acmicpc.net/problem/19638): Priority Queue, ์ž๋ฃŒ๊ตฌ์กฐ / ์‹ค๋ฒ„1
17+
- ์ •๋‹ต ์ฝ”๋“œ: [Assignment_BOJ_19638_์„ผํ‹ฐ์™€๋งˆ๋ฒ•์˜๋ฟ…๋ง์น˜.py](./Assignment_BOJ_19638_์„ผํ‹ฐ์™€๋งˆ๋ฒ•์˜๋ฟ…๋ง์น˜.py)
Binary file not shown.
Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
'''
2+
BOJ #1202. ๋ณด์„ ๋„๋‘‘(๊ณจ๋“œ2)
3+
https://www.acmicpc.net/problem/1202
4+
์œ ํ˜•: Priority Queue, Data Structure, Greedy
5+
'''
6+
import sys
7+
import heapq
8+
9+
input = sys.stdin.readline
10+
11+
# Step 1: ์ž…๋ ฅ ๋ฐ›๊ธฐ
12+
N, K = map(int, input().split()) # N: ๋ณด์„ ๊ฐœ์ˆ˜, K: ๊ฐ€๋ฐฉ ๊ฐœ์ˆ˜
13+
jewelry = [] # (๋ฌด๊ฒŒ, ๊ฐ€๊ฒฉ)
14+
bags = [] # ๊ฐ€๋ฐฉ์˜ ์ตœ๋Œ€ ๋ฌด๊ฒŒ
15+
16+
for _ in range(N):
17+
M, V = map(int, input().split())
18+
jewelry.append((M, V))
19+
20+
for _ in range(K):
21+
bags.append(int(input()))
22+
23+
# Step 2: ๋ณด์„๊ณผ ๊ฐ€๋ฐฉ ์ •๋ ฌ
24+
jewelry.sort() # ๋ณด์„์„ ๋ฌด๊ฒŒ ๊ธฐ์ค€์œผ๋กœ ์ •๋ ฌ
25+
bags.sort() # ๊ฐ€๋ฐฉ์„ ๋ฌด๊ฒŒ ๊ธฐ์ค€์œผ๋กœ ์ •๋ ฌ
26+
27+
# Step 3: ์šฐ์„ ์ˆœ์œ„ ํ (์ตœ๋Œ€ ํž™) ์‚ฌ์šฉ
28+
max_heap = []
29+
result = 0
30+
idx = 0
31+
32+
# ๊ฐ€๋ฐฉ์„ ํ•˜๋‚˜์”ฉ ์ฒ˜๋ฆฌ
33+
for bag in bags:
34+
# ํ˜„์žฌ ๊ฐ€๋ฐฉ์ด ์ˆ˜์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๋ณด์„์„ ๋ชจ๋‘ ์ถ”๊ฐ€ (๋ฌด๊ฒŒ ๊ธฐ์ค€ ์ •๋ ฌ๋œ ์ƒํƒœ)
35+
while idx < N and jewelry[idx][0] <= bag:
36+
heapq.heappush(max_heap, -jewelry[idx][1]) # ์ตœ๋Œ€ ํž™์„ ์œ„ํ•ด ์Œ์ˆ˜ ์ €์žฅ
37+
idx += 1
38+
39+
# ๊ฐ€์žฅ ๊ฐ€์น˜๊ฐ€ ๋†’์€ ๋ณด์„์„ ์„ ํƒ
40+
if max_heap:
41+
result += -heapq.heappop(max_heap)
42+
43+
print(result)
44+

0 commit comments

Comments
ย (0)