[νλ‘κ·Έλλ¨Έμ€ / Pythonνμ΄μ¬] 무μ§μ λ¨Ήλ°© λΌμ΄λΈ
λ¬Έμ λ§ν¬: https://programmers.co.kr/learn/courses/30/lessons/42891
λ¬Έμ μ€λͺ
* ν¨μ¨μ± ν μ€νΈμ λΆλΆ μ μκ° μλ λ¬Έμ μ λλ€.
νμ μμμ΄ μμ±ν 무μ§λ μμ μ μ¬λ₯μ λ½λ΄κ³ μΆμ΄ μ‘κ³ κ³ λ―Ό λμ μΉ΄μΉ΄μ€ TV λΌμ΄λΈλ‘ λ°©μ‘μ νκΈ°λ‘ λ§μλ¨Ήμλ€.
κ·Έλ₯ λ¨Ήλ°©μ νλ©΄ λ€λ₯Έ λ°©μ‘κ³Ό μ°¨λ³μ±μ΄ μκΈ° λλ¬Έμ 무μ§λ μλμ κ°μ΄ λ νΉν λ°©μμ μκ°ν΄λλ€.
νμ νμ λ¨Ήμ΄μΌ ν N κ°μ μμμ΄ μλ€.
κ° μμμλ 1λΆν° N κΉμ§ λ²νΈκ° λΆμ΄μμΌλ©°, κ° μμμ μμ·¨νλλ° μΌμ μκ°μ΄ μμλλ€.
무μ§λ λ€μκ³Ό κ°μ λ°©λ²μΌλ‘ μμμ μμ·¨νλ€.
- 무μ§λ 1λ² μμλΆν° λ¨ΉκΈ° μμνλ©°, νμ νμ λ²νΈκ° μ¦κ°νλ μμλλ‘ μμμ λ¬΄μ§ μμΌλ‘ κ°μ Έλ€ λλλ€.
- λ§μ§λ§ λ²νΈμ μμμ μμ·¨ν νμλ νμ νμ μν΄ λ€μ 1λ² μμμ΄ λ¬΄μ§ μμΌλ‘ μ¨λ€.
- 무μ§λ μμ νλλ₯Ό 1μ΄ λμ μμ·¨ν ν λ¨μ μμμ κ·Έλλ‘ λκ³ , λ€μ μμμ μμ·¨νλ€.
- λ€μ μμμ΄λ, μμ§ λ¨μ μμ μ€ λ€μμΌλ‘ μμ·¨ν΄μΌ ν κ°μ₯ κ°κΉμ΄ λ²νΈμ μμμ λ§νλ€.
- νμ νμ΄ λ€μ μμμ λ¬΄μ§ μμΌλ‘ κ°μ Έμ€λλ° κ±Έλ¦¬λ μκ°μ μλ€κ³ κ°μ νλ€.
무μ§κ° λ¨Ήλ°©μ μμν μ§ K μ΄ νμ λ€νΈμν¬ μ₯μ λ‘ μΈν΄ λ°©μ‘μ΄ μ μ μ€λ¨λμλ€.
무μ§λ λ€νΈμν¬ μ μν ν λ€μ λ°©μ‘μ μ΄μ΄κ° λ, λͺ λ² μμλΆν° μμ·¨ν΄μΌ νλμ§λ₯Ό μκ³ μ νλ€.
κ° μμμ λͺ¨λ λ¨Ήλλ° νμν μκ°μ΄ λ΄κ²¨μλ λ°°μ΄ food_times, λ€νΈμν¬ μ₯μ κ° λ°μν μκ° K μ΄κ° 맀κ°λ³μλ‘ μ£Όμ΄μ§ λ λͺ λ² μμλΆν° λ€μ μμ·¨νλ©΄ λλμ§ return νλλ‘ solution ν¨μλ₯Ό μμ±νλΌ.
μ νμ¬ν
- food_times λ κ° μμμ λͺ¨λ λ¨Ήλλ° νμν μκ°μ΄ μμμ λ²νΈ μμλλ‘ λ€μ΄μλ λ°°μ΄μ΄λ€.
- k λ λ°©μ‘μ΄ μ€λ¨λ μκ°μ λνλΈλ€.
- λ§μ½ λ μμ·¨ν΄μΌ ν μμμ΄ μλ€λ©΄ -1μ λ°ννλ©΄ λλ€.
μ νμ± ν μ€νΈ μ ν μ¬ν
- food_times μ κΈΈμ΄λ 1 μ΄μ 2,000 μ΄νμ΄λ€.
- food_times μ μμλ 1 μ΄μ 1,000 μ΄νμ μμ°μμ΄λ€.
- kλ 1 μ΄μ 2,000,000 μ΄νμ μμ°μμ΄λ€.
ν¨μ¨μ± ν μ€νΈ μ ν μ¬ν
- food_times μ κΈΈμ΄λ 1 μ΄μ 200,000 μ΄νμ΄λ€.
- food_times μ μμλ 1 μ΄μ 100,000,000 μ΄νμ μμ°μμ΄λ€.
- kλ 1 μ΄μ 2 x 10^13 μ΄νμ μμ°μμ΄λ€.
μ μΆλ ₯ μ
food_times | k | result |
[3, 1, 2] | 5 | 1 |
λ¬Έμ νμ΄
μ²μμ (food_time, μμ λ²νΈ)λ₯Ό 리μ€νΈμ λ£μ΄μ λ¨Ήλλ° νμν μκ°μ΄ 짧μ μμλλ‘ μ λ ¬ν΄μΌκ² λ€λ μμ΄λμ΄κΉμ§ λ μ¬λ Έλ€. food_timeμ΄ μμ μμλλ‘ μμμ μ²λ¦¬νλ©΄μ λ§μ½ κ·Έ μμμ λ€ λ¨Ήλλ° κ±Έλ¦° μκ°μ΄ Kλ³΄λ€ ν¬λ€λ©΄, κ·Έλ λͺ λ²μ§Έ μμμ λ€μ μμ·¨ν΄μΌ λλμ§ κ³μ°νλλ‘ νλ€. νμ§λ§ μ΄ λ°©λ²μΌλ‘ μ€ν¨νλ€.. μμμ λ¨Ήλλ° κ±Έλ¦¬λ μκ° κ³μ°μ μλͺ»ν΄μ κ³μ μ€λ΅μ²λ¦¬κ° λλ€..γ γ λ¨μ μμμ μμ κ³μ°ν λ μκ°μΌλ‘ κ³μ°νμ§ λ§κ³ νμ νμ΄ νμ νλ νμλ‘ κ³μ°νμ΄μΌ νλλ° κ·Έ λΆλΆμμ μ€μλ₯Ό νλ€.
μμ΄λμ΄: (food_time, μμ λ²νΈ)λ₯Ό heapμ λ£κ³ food_timeμ΄ μ§§μ μμλΆν° μμ νμ!
1. λͺ¨λ μμμ λν΄ (food_time, μμ λ²νΈ)λ₯Ό heapμ μ½μ νλ€.
2. food_timeμ΄ μ§§μ μμλΆν° μμμ λ¨Ήλλ° κ±Έλ¦¬λ μκ°μ κ³μ°νλ€.
- μμμ λ¨Ήλλ° κ±Έλ¦¬λ μκ°: (λ¨μ μμ μ) * (λ¨μ μμ κ°μ)
- λ¨μ μμ μ: νμ¬ food_time - μ΄μ μ μ κ±°ν food_time
3. νμ¬ μμμ λ€ λ¨Ήμ μ μλ κ²½μ° μμμ μ κ±°νλ€.
- λ¨μ μκ°(k)μμ νμ¬ μμμ λ¨Ήλ μκ°μ λΊλ€.
- μ΄μ μ μ κ±°ν food_timeκ³Ό λ¨μ μμ κ°μλ₯Ό κ°±μ νλ€.
4. νμ¬ μμμ λ€ λ¨Ήμ μ μλ κ²½μ° λ¨μ μμ μ€μμ λ€μμ λ¨Ήμ΄μΌ ν μμ λ²νΈλ₯Ό ꡬνλ€.
- heapμ λ¨μμλ μμ λ²νΈ μ€μ (k + 1)λ²μ§Έ λ²νΈλ₯Ό μ°Ύλλ€.
- kλ λ¨μ μλ μμ κ°μλ³΄λ€ ν΄ μ μμΌλ―λ‘ (k % λ¨μ μμ κ°μ)λ‘ λ²νΈλ₯Ό μ°Ύλλ€.
μμ€μ½λ
# 무μ§μ λ¨Ήλ°© λΌμ΄λΈ
import heapq
def solution(food_times, k):
answer = -1
h = []
for i in range(len(food_times)):
heapq.heappush(h, (food_times[i], i + 1))
food_num = len(food_times) # λ¨μ μμ κ°μ
previous = 0 # μ΄μ μ μ κ±°ν μμμ food_time
while h:
# λ¨Ήλλ° κ±Έλ¦¬λ μκ°: (λ¨μ μ) * (λ¨μ μμ κ°μ)
t = (h[0][0] - previous) * food_num
# μκ°μ΄ λ¨μ κ²½μ° νμ¬ μμ λΉΌκΈ°
if k >= t:
k -= t
previous, _ = heapq.heappop(h)
food_num -= 1
# μκ°μ΄ λΆμ‘±ν κ²½μ°(μμμ λ€ λͺ»λ¨Ήμ κ²½μ°) λ¨μ μμ μ€μ λ¨Ήμ΄μΌ ν μμ μ°ΎκΈ°
else:
idx = k % food_num
h.sort(key=lambda x: x[1])
answer = h[idx][1]
break
return answer