π€λ¬Έμ ν΄κ²°
Lv3 | μ°μ μμ ν
νμ΄μ¬μμλ heapq λ₯Ό μ¬μ©ν©λλ€.
λ¨Όμ νμ¬ μκ°μ νμ κ³μ°ν΄ μ€λλ€.
νμ¬ μκ°λ³΄λ€ ν¬μ μκ°μ΄ μμ μμ λ€μ ννμ λ£μ΄μ€λλ€.
ννμ κ°μ΄ μ¬λ¬κ° λ€μ΄μλλΌλ, heappop() μ νκ² λλ©΄ μμ μκ°μ΄ κ°μ₯ 짧μ μμ μ΄ λμ€κ² λ©λλ€.
( ννμμλ μ΅μκ°μ΄ λμ€κ² λ©λλ€ )
μμ μκ°λ§νΌ νμ¬μκ° μ λλ €μ£Όκ³ , ν΄λΉ μμ μ λκΈ°μκ°+μμ μκ° μ λ°λ‘ μ μ₯ν΄ λ‘λλ€.
ν μμ μ΄ λλκ³ λλ©΄ μκ°μ΄ νλ κΈ° λλ¬Έμ
λ€μ νμ¬ μκ°λ³΄λ€ ν¬μ μκ°μ΄ μμ μμ λ€μ ννμ λ£μ΄μ€λλ€.(μκΉ λ£μ μμ μ μΈ)
λκ°μ΄ heappop() μΌλ‘ νμ¬μκ°κ³Ό μμ μκ°μ μ μ₯ν©λλ€.
π¨ μ 무ν¬μ μκ°μ΄ μ€λ¦μ°¨μ μ λ ¬μ΄ μλμ΄μμ΄μ λ¨Όμ μ λ ¬μ ν΄μ€μΌ ν©λλ€.
π»μμ€ μ½λ
import heapq
def solution(jobs):
cur_sec = 0 # νμ¬μκ°
pq = [] # νμ¬ μκ°μ μμ
λκΈ°μ€μΈ work
result = [] # κ°κ°μ work λΉ μμ
μκ°μ μ μ₯
jobs.sort() # μμ
ν¬μ
μκ°μ΄ μ μ μμλλ‘ μ λ ¬
length_jobs = len(jobs)
idx = 0 # μμ
ν¬μ
κ°μ
while idx < length_jobs or pq: # μμ
μ λͺ¨λ ν¬μ
νκ³ λκΈ°μ€μΈ μμ
λ μμΌλ©΄ μ’
λ£
for i in range(idx, len(jobs)):
if jobs[i][0] <= cur_sec: # μμ
μ ν¬μ
ν μκ°μ΄ νμ¬μκ°λ³΄λ€ μ μΌλ©΄ ν¬μ
!!
# ννλ₯Ό μ°κΈ° μν΄ μμ
μκ°κ³Ό ν¬μ
μκ°μ μμλ₯Ό λ°κΏμ λ£μ΄μ€
heapq.heappush(pq, [jobs[i][1], jobs[i][0]])
else:
idx = i
break
else:
idx = i + 1
# print('λκΈ°μ€μΈ μμ
: ', pq)
if pq:
# μμ
μκ°, ν¬μ
μκ°
work_sec, enter_sec = heapq.heappop(pq)
# cur_sec-enter_sec: λκΈ°μκ°
result.append(work_sec+cur_sec-enter_sec)
# μμ
μκ°λ§νΌ νμ¬μκ° ++
cur_sec += work_sec
else:
cur_sec += 1
# κ²°κ³Ό
answer = sum(result) // length_jobs
return answer
πλ¬Έμ νμΈ
μΆμ²: νλ‘κ·Έλλ¨Έμ€
λ§ν¬: https://programmers.co.kr/learn/courses/30/lessons/42627
λ¬Έμ μ€λͺ
νλλμ€ν¬λ ν λ²μ νλμ μμ λ§ μνν μ μμ΅λλ€. λμ€ν¬ 컨νΈλ‘€λ¬λ₯Ό ꡬννλ λ°©λ²μ μ¬λ¬ κ°μ§κ° μμ΅λλ€. κ°μ₯ μΌλ°μ μΈ λ°©λ²μ μμ²μ΄ λ€μ΄μ¨ μμλλ‘ μ²λ¦¬νλ κ²μ λλ€.
μλ₯Όλ€μ΄
- 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 걸리λ μμ μμ²μ΄ λ€μ΄μ΅λλ€.
'Algorithm Problem > Python' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[python] νλ‘κ·Έλλ¨Έμ€ - μΌκ·Ό μ§μ (0) | 2020.09.11 |
---|---|
[python] νλ‘κ·Έλλ¨Έμ€ - μΏ ν€ κ΅¬μ (0) | 2020.09.10 |
[python] λ°±μ€ - 2343. κΈ°ν λ μ¨ (5) | 2020.09.09 |
[python] λ°±μ€ - 1926. κ·Έλ¦Ό (0) | 2020.09.08 |
[python] λ°±μ€ - 1743. μμλ¬Ό νΌνκΈ° (0) | 2020.09.07 |