๋ฌธ์
https://www.acmicpc.net/problem/2461
๋ฐฑ์ค ๋ฌธ์ ์ง - 0x14๊ฐ - ํฌ ํฌ์ธํฐ
์๊ณ ๋ฆฌ์ฆ: ํฌ ํฌ์ธํฐ, ์ฐ์ ์์ ํ, ์ ๋ ฌ
ํ์ด
ํฌํฌ์ธํฐ๋ง ์ฌ์ฉํ๋ฉด ์๊ฐ์ด๊ณผ๊ฐ ๋๋ ๋ฌธ์ ๋ค.
Python3๋ก ํต๊ณผํ๊ธฐ ์ํด์ ์ฐ์ ์์ ํ, ํheapq
์ ์ฌ์ฉํด์ผํ๋ค.
์ฐ์ ๊ฐ ๋ฐ์ ๋ฅ๋ ฅ์น๋ฅผ ๋ชจ๋ ์ค๋ฆ์ฐจ์ ์ ๋ ฌํ๋ค.
๊ทธ๋ฆฌ๊ณ ํ ๋ฆฌ์คํธ heap
์ ๊ฐ ๋ฐ์ ์ต์๊ฐ๋ค์ (๊ฐ, ๋ฐ, ์ธ๋ฑ์ค) ํํ๋ก ์ฝ์
ํ๋ค.
์ด ์ค ๊ฐ์ฅ ํฐ ๊ฐ์ ๋ฐ๋ก ์ ์ฅํด๋ฌ์ผ ํ๋ค.
- heap์์ ์ต์๊ฐ์ ๊บผ๋ => (๊ฐ, ๋ฐ, ์ธ๋ฑ์ค)
- ๊ธฐ์กด ๊ฒฐ๊ณผ๊ฐ๊ณผ (์ต๋๊ฐ - ์ต์๊ฐ) ์ค ๋ ์์ ๊ฐ์ ์๋ก์ด ๊ฒฐ๊ณผ๊ฐ์ผ๋ก ์ ๋ฐ์ดํธ.
- ์ธ๋ฑ์ค๋ฅผ 1 ์ฆ๊ฐ์ํด.
- ํด๋น ๋ฐ์์ ๋ช๋ฒ์งธ ๊ฐ์ ๊ฐ๋ฆฌํค๋์ง ๋ํ๋ด๋ ํฌ์ธํฐ ์ญํ
- ์ฆ, ํ์ฌ๊น์ง์ ๊ฐ์ฅ ์ต์๊ฐ์ ํฌ์ธํฐ๋ฅผ ๋ปํจ.
- +1 ์ฒ๋ฆฌ ํ ์ธ๋ฑ์ค๊ฐ M์ด ๋๋ค๋ฉด, ๋ ์ด์ ํ์ํ ํฌ์ธํฐ๊ฐ ์๋ค๋ ๋ป์ด๋ฏ๋ก break.
- ๊บผ๋ธ ๋ฐ์ ๋ค์ ์ต์๊ฐ๊ณผ ํฌ์ธํฐ๋ฅผ ์ฝ์ => (๋ค์ ๊ฐ, ๋ฐ, 1 ์ฆ๊ฐ์ํจ ์ธ๋ฑ์ค)
- ๊ธฐ์กด ์ต๋๊ฐ๊ณผ ์๋ก ์ง์ด๋ฃ์ ์ต์๊ฐ์ ๋น๊ต ํ ๋ ํฐ๊ฐ์ ์๋ก์ด ์ต๋๊ฐ์ผ๋ก ์ ๋ฐ์ดํธ
์ ์ฒด ์ฝ๋
# ๋ฉ๋ชจ๋ฆฌ: 70676KB / ์๊ฐ: 1448ms
from sys import stdin
from heapq import heappop, heappush
input = stdin.readline
N, M = map(int, input().split())
classes = [sorted(map(int, input().split())) for _ in range(N)]
heap = []
max_stat = 0
# ๊ฐ ๋ฐ์ ์ต์๊ฐ์ heap์ ์ถ๊ฐ
for i in range(N):
heappush(heap, (classes[i][0], i, 0))
max_stat = max(classes[i][0], max_stat)
min_diff = float("inf")
while True:
# ํ์ฌ heap์์ ์ต์๊ฐ์ ๊บผ๋
min_stat, class_idx, pos = heappop(heap)
min_diff = min(max_stat - min_stat, min_diff)
pos += 1 # ํฌ์ธํฐ๋ฅผ 1 ์ฆ๊ฐ์ํด
if pos == M:
break
# ํด๋น ๋ฐ์ ๋ค์ ์ต์๊ฐ๊ณผ ํฌ์ธํฐ๋ฅผ ์ฝ์
heappush(heap, (classes[class_idx][pos], class_idx, pos))
max_stat = max(classes[class_idx][pos], max_stat)
print(min_diff)
์ฐธ๊ณ ๋ก ์ต๋๊ฐ์ ๋ฏธ๋ฆฌ ๊ตฌํด๋์ง ์์ผ๋ฉด ์๊ฐ์ด๊ณผ์ ๊ฑธ๋ฆฐ๋ค.
๋งค ํด๋ง๋ค heap์ ๋ชจ๋ ์์๋ฅผ ํ์ํด์ผํ๊ธฐ ๋๋ฌธ์ด๋ค.
๊ทธ๋ฆฌ๊ณ ์ด๋ฒ ๋ฌธ์ ๋ฅผ ํ๋ฉฐ ํ ์ฌ์ฉ์ ์ฃผ์ํด์ผํ ์ ์ ์๊ฒ๋์๋ค...
ํ์ 0๋ฒ์งธ ์ธ๋ฑ์ค๊ฐ์ ํญ์ ์ต์๊ฐ์ ๋ํ๋ด์ง๋ง, 1๋ฒ์งธ๊ฐ์ด ๊ทธ ๋ค์ ์ต์๊ฐ์ ๋ํ๋ด๋๊ฒ์ ์๋๋ค.
ํ์ ํญ์ ์์ ์ด์งํธ๋ฆฌ ๊ตฌ์กฐ๋ก ๊ตฌ์ฑ๋์ด ์์ผ๋ฏ๋ก ํ์ ๋
ธ๋๊ฐ์ ์์๋ ๋ณด์ฅ๋์ง ์๋๋ค.
์๋ฅผ๋ค์ด, [0, 5, 3, 9, 2]
๋ฅผ ํ์ ์ถ๊ฐํ๊ฒ ๋๋ฉด ์๋์ ๊ฐ๋ค.
from heapq import heappush, heappop
arr = [0, 5, 3, 9, 2]
heap = []
for a in arr:
heappush(heap, a)
print(heap)
# [0, 2, 3, 9, 5]
heappop(heap) # 0 ์ถ์ถ
print(heap)
# [2, 5, 3, 9]
์ด๊ฑธ ์ ๋๋ก ์ดํดํ์ง ๋ชปํ ์ฑ ์ต๋๊ฐ์ heap[-1]
๋ก ๊ตฌํ์๋ค๊ฐ ํ๋ฆผ^^;
์๋ฃ๊ตฌ์กฐ ๊ณต๋ถ๋ฅผ ๋ค์ ํด์ผ๋ ๋ฏ์ถ๋ค.
ํ์ ์ฝ์ /์ญ์ ๊ถ๊ธํ๋ค๋ฉด ์๋ ๋ธ๋ก๊ทธ๋ฅผ ์ฐธ๊ณ ํ์.
https://heytech.tistory.com/69
[์๋ฃ๊ตฌ์กฐ] ํ(Heap) ์๋ฃ๊ตฌ์กฐ์ ๋ํด ์์๋ณด์!(+Python ๊ตฌํ)
๐ ๋ชฉ์ฐจ 1. ํ ์๋ฃ๊ตฌ์กฐ 2. ํ ์๋ฃ๊ตฌ์กฐ๋ ์ธ์ ์ฌ์ฉํ ๊น? 3. ํ ์๋ฃ๊ตฌ์กฐ์ ์ข ๋ฅ 4. ํ ์๋ฃ๊ตฌ์กฐ์ ๋์ ๊ณผ์ (์ต์ ํ) 4.1. ๋ฐ์ดํฐ ์ฝ์ 4.2. ๋ฐ์ดํฐ ์ญ์ 5. ํ ์๋ฃ๊ตฌ์กฐ ๊ตฌํ(Python) 5.1. heapq ์ ์ 5.2.
heytech.tistory.com