λ°μν
π€λ¬Έμ ν΄κ²°
- μ°μ μμ ν
- λκΈ°μ€μΈ μ¬λκ³Ό λ¨Όμ μ¬μ©μ€μΈ μ¬λ μ€ κ°μ₯ 빨리 λλλ κ³³κ³Ό λΉκ΅
- λκΈ°μ€μΈ μ¬λλ³΄λ€ λ¦κ² λλλ©΄ μλ‘μ΄ μλ¦¬λ‘ λ°°μ
- κΈ°μ‘΄μ μ¬λμ΄ λλλ κ³³μ΄ μμΌλ©΄
- κ·Έκ² μ¬λ¬ κ³³μ΄ μμΌλ©΄ λλλ κ³³μ λ€ λ½μμ λ¨λ μ리 μ°μ μμ νμ λ£λλ€.
- λ μ΄μ μμ λ λ¨λ μ리 μ°μ μμ νμμ μ리λ₯΄ νλ λ½μμ λ°°μ νλ€.
- μ¬μ©μ€μΈ μ»΄ν¨ν° λλλ μκ°κ³Ό μ리λ²νΈκ° λ΄κΈ΄ μ°μ μμ ν
- λ¨μμλ μλ¦¬κ° λ΄κΈ΄ μ°μ μμ ν
μ΄λ κ² ν΄μ λκ°λ₯Ό μ¬μ©νλ€.
μ°μ μμ νλ₯Ό λκ° μ¨μΌν΄μ ν·κ°λ Έλ λ¬Έμ
π»μμ€ μ½λ
import sys
import heapq
input = sys.stdin.readline
N = int(input())
logs = [list(map(int, input().split())) for _ in range(N)]
logs.sort() # μμμ΄ λΉ λ₯Έ μμΌλ‘ μ λ ¬
# μ리 μΉ΄μ΄νΈ μ
κ²
use_cnt = [0] * N
use_cnt[0] = 1
# μ¬μ©μ€μΈ μ»΄ν¨ν° λλλμκ°κ³Ό μ리 λ²νΈ
pq = []
heapq.heappush(pq, [logs[0][1], 0])
# λ¨μμλ κ°μ₯ μλ¦¬λ€ ( μμ리 λ½μΌλ €κ³ )
computers_pq = [i for i in range(N)]
heapq.heapify(computers_pq) # μ리λ§
heapq.heappop(computers_pq)
for log in logs[1:]: # μ΄λ―Έ λ£μμΌλκΉ 1λΆν° μμ
start, end = log
if pq[0][0] > start: # μ μΌλΉ¨λ¦¬ λλλ μ λ³΄λ€ μμ μκ°μ΄ λ¦μΌλ©΄ λ¨μ μλ λ€λ₯Έ μλ¦¬λ‘ κ°λΌ
new_posi = heapq.heappop(computers_pq)
use_cnt[new_posi] += 1
heapq.heappush(pq, [end, new_posi])
else:
while True: # μ¬μ©μ€μΈ μλ¦¬κ° μ¬λ¬κ΅°λ°κ° λλμλ κ²½μ°κ° μλ€. κ·Έ μ€μμ κ°μ₯ μμ μ리λ₯Ό λ½μμΌνλ€.
prev_end, prev_seq = heapq.heappop(pq)
if pq and pq[0][0] <= start: # κ·Έ λ€μ κ²λ μ΄λ―Έ λλμλ κ²½μ°κ° μλ€.
heapq.heappush(computers_pq, prev_seq)
continue
else:
new_posi = heapq.heappushpop(computers_pq, prev_seq)
heapq.heappush(pq, [end, new_posi])
use_cnt[new_posi] += 1
break
idx = N - use_cnt.count(0)
print(idx)
print(' '.join(list(map(str, use_cnt[:idx]))))
πλ¬Έμ νμΈ
μΆμ²: BACKJOON ONLINE JUDGE
λ°μν
'Algorithm Problem > Python' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[python] λ°±μ€ - 21608. μμ΄ μ΄λ±νκ΅ (0) | 2021.09.15 |
---|---|
[python] λ°±μ€ - 1347. λ―Έλ‘ λ§λ€κΈ° (0) | 2021.09.14 |
[python] λ°±μ€ - 11085. κ΅°μ¬ μ΄λ (0) | 2021.09.10 |
[python] λ°±μ€ - 19598. μ΅μ νμμ€ κ°μ (0) | 2021.09.09 |
[python] λ°±μ€ - 1013. Contact (0) | 2021.09.08 |