π‘solutions )
π¬ μ°Έκ³ : λμ€ν¬ 컨νΈλ‘€λ¬ λ¬Έμ μμ μꡬνλ μμ μ²λ¦¬ λ°©μμ FIFO(First In First Out)κ° μλλΌ SJF(Shortes Job First)λ°©μμ΄λ€. μ¦, μμ²λ μμ λ€ μ€ κ°μ₯ 짧μ μμ μκ°μ μꡬνλ μμ λΆν° μ°μ μ μΌλ‘ μ²λ¦¬νλ λ°©μμ΄λ€. -> μ΄λ° λ°©μμΌλ‘ μ§ννλ©΄ κ°κ°μ μμ²λ μμ λ€μ λκΈ° μκ°μ μ€μΌ μ μλ€λ μ₯μ μ΄ μλ€. (λΉμ μ ν μ€μΌμ€λ§ λ°©μμμ νκ· λκΈ° μκ°μ΄ κ°μ₯ 짧λ€)
π¬ heapq λͺ¨λμ ν΅ν΄ μ΅μ ν μ¬μ©νμμ -> heapμ μμ μ μμμκ°, μμ μ΄ μμ²λλ μμ μμλ‘ κ°μ λ£μΌλ©΄ (μ΄λ² μμ μμ heap = [[3, 0], [6, 2], [9, 1]] μμΌλ‘ λ€μ΄κ°λ μ ) -> heappopν λ μμ μ μμμκ°μ κΈ°μ€μΌλ‘ κ°μ₯ μμ μμμκ°μ κ°μ§ κ°(μμμκ°, μμ μμ² μμ )μ λ°ννλ€.
π¬ μ΅μ ν ꡬ쑰μ΄κΈ° λλ¬Έμ μ£Όμ΄μ§ μμ μμ [0, 3]μ΄ μ€νλ ν λ¨μ μμ μ€ μμμκ°μ΄ 6μ΄ κ°μ₯ 짧기 λλ¬Έμ [2, 6], [1, 9] μμλ‘ μ€νλλ€.
π¬ μμ μ΄ μμ²λλ μμ κΈ°μ€μΌλ‘ λ΄λ¦Όμ°¨μ μ λ ¬ -> λμ€μ jobsμμ pop()ν λ κ°μ₯ λ¨Όμ μμ²λ μμ λ€μ μ°μ μ μΌλ‘ μ°ΎκΈ° μν¨μ΄λ€.
π¬ heappop()νλ©΄ ν΄λΉ μμ μ΄ μ€νλλ€λ μλ―Έμ΄λ―λ‘ μμ μ΄ μμλλ μκ°μ λνλ΄λ startμ μμ μ΄ λλλ μκ°μ λνλ΄λ end κ·Έλ¦¬κ³ ν΄λΉ μμ μ μμ²λΆν° μ’ λ£κΉμ§ κ±Έλ¦° μκ°μ ν©νλ answerκΉμ§ λͺ¨λ κ°μ μ λ°μ΄νΈ ν΄μ€λ€.
π¨π»code )
import heapq
def solution(jobs):
n = len(jobs)
start, end = 0, 0
heap = []
jobs.sort(key=lambda x : -x[0])
answer = 0
while jobs or heap:
while jobs and start <= jobs[-1][0] <= end:
point, time = jobs.pop()
heapq.heappush(heap, [time, point])
if heap:
time, point = heapq.heappop(heap)
start = end
end += time
answer += (end-point)
else:
end += 1
return answer // n
πdescription )
λ¬Έμ μ€λͺ
νλλμ€ν¬λ ν λ²μ νλμ μμ λ§ μνν μ μμ΅λλ€. λμ€ν¬ 컨νΈλ‘€λ¬λ₯Ό ꡬννλ λ°©λ²μ μ¬λ¬ κ°μ§κ° μμ΅λλ€. κ°μ₯ μΌλ°μ μΈ λ°©λ²μ μμ²μ΄ λ€μ΄μ¨ μμλλ‘ μ²λ¦¬νλ κ²μ λλ€.
μλ₯Όλ€μ΄
- 0ms μμ μ 3msκ° μμλλ Aμμ μμ² - 1ms μμ μ 9msκ° μμλλ Bμμ μμ² - 2ms μμ μ 6msκ° μμλλ Cμμ μμ²
μ κ°μ μμ²μ΄ λ€μ΄μμ΅λλ€. μ΄λ₯Ό κ·Έλ¦ΌμΌλ‘ νννλ©΄ μλμ κ°μ΅λλ€.
ν λ²μ νλμ μμ²λ§μ μνν μ μκΈ° λλ¬Έμ κ°κ°μ μμ μ μμ²λ°μ μμλλ‘ μ²λ¦¬νλ©΄ λ€μκ³Ό κ°μ΄ μ²λ¦¬ λ©λλ€.
- A: 3ms μμ μ μμ μλ£ (μμ²μμ μ’ λ£κΉμ§ : 3ms) - B: 1msλΆν° λκΈ°νλ€κ°, 3ms μμ μ μμ μ μμν΄μ 12ms μμ μ μμ μλ£(μμ²μμ μ’ λ£κΉμ§ : 11ms) - C: 2msλΆν° λκΈ°νλ€κ°, 12ms μμ μ μμ μ μμν΄μ 18ms μμ μ μμ μλ£(μμ²μμ μ’ λ£κΉμ§ : 16ms)
μ΄ λ κ° μμ μ μμ²λΆν° μ’ λ£κΉμ§ κ±Έλ¦° μκ°μ νκ· μ 10ms(= (3 + 11 + 16) / 3)κ° λ©λλ€.
νμ§λ§ A → C → B μμλλ‘ μ²λ¦¬νλ©΄
- A: 3ms μμ μ μμ μλ£(μμ²μμ μ’ λ£κΉμ§ : 3ms) - C: 2msλΆν° λκΈ°νλ€κ°, 3ms μμ μ μμ μ μμν΄μ 9ms μμ μ μμ μλ£(μμ²μμ μ’ λ£κΉμ§ : 7ms) - B: 1msλΆν° λκΈ°νλ€κ°, 9ms μμ μ μμ μ μμν΄μ 18ms μμ μ μμ μλ£(μμ²μμ μ’ λ£κΉμ§ : 17ms)
μ΄λ κ² A → C → Bμ μμλ‘ μ²λ¦¬νλ©΄ κ° μμ μ μμ²λΆν° μ’ λ£κΉμ§ κ±Έλ¦° μκ°μ νκ· μ 9ms(= (3 + 7 + 17) / 3)κ° λ©λλ€.
κ° μμ μ λν΄ [μμ μ΄ μμ²λλ μμ , μμ μ μμμκ°]μ λ΄μ 2μ°¨μ λ°°μ΄ jobsκ° λ§€κ°λ³μλ‘ μ£Όμ΄μ§ λ, μμ μ μμ²λΆν° μ’ λ£κΉμ§ κ±Έλ¦° μκ°μ νκ· μ κ°μ₯ μ€μ΄λ λ°©λ²μΌλ‘ μ²λ¦¬νλ©΄ νκ· μ΄ μΌλ§κ° λλμ§ return νλλ‘ solution ν¨μλ₯Ό μμ±ν΄μ£ΌμΈμ. (λ¨, μμμ μ΄νμ μλ λ²λ¦½λλ€)
μ ν μ¬ν
- jobsμ κΈΈμ΄λ 1 μ΄μ 500 μ΄νμ λλ€.
- jobsμ κ° νμ νλμ μμ μ λν [μμ μ΄ μμ²λλ μμ , μμ μ μμμκ°] μ λλ€.
- κ° μμ μ λν΄ μμ μ΄ μμ²λλ μκ°μ 0 μ΄μ 1,000 μ΄νμ λλ€.
- κ° μμ μ λν΄ μμ μ μμμκ°μ 1 μ΄μ 1,000 μ΄νμ λλ€.
- νλλμ€ν¬κ° μμ μ μννκ³ μμ§ μμ λμλ λ¨Όμ μμ²μ΄ λ€μ΄μ¨ μμ λΆν° μ²λ¦¬ν©λλ€.
μ μΆλ ₯ μ
jobsreturn
[[0, 3], [1, 9], [2, 6]] | 9 |
μ μΆλ ₯ μ μ€λͺ
λ¬Έμ μ μ£Όμ΄μ§ μμ κ°μ΅λλ€.
- 0ms μμ μ 3ms 걸리λ μμ μμ²μ΄ λ€μ΄μ΅λλ€.
- 1ms μμ μ 9ms 걸리λ μμ μμ²μ΄ λ€μ΄μ΅λλ€.
- 2ms μμ μ 6ms 걸리λ μμ μμ²μ΄ λ€μ΄μ΅λλ€.