DevYoon
[νλ‘κ·Έλλ¨Έμ€] λνμ€ κ²μ (Python) λ³Έλ¬Έ
link π https://school.programmers.co.kr/learn/courses/30/lessons/142085
λ¬Έμ μ€λͺ
μ€νΈλ μμ¦ λνμ€ κ²μμ νΉ λΉ μ Έ μμ΅λλ€. λνμ€ κ²μμ μ€νΈκ° 보μ ν λ³μ¬ nλͺ μΌλ‘ μ°μλλ μ μ 곡격μ μμλλ‘ λ§λ κ²μμ λλ€. λνμ€ κ²μμ λ€μκ³Ό κ°μ κ·μΉμΌλ‘ μ§νλ©λλ€.
- μ€νΈλ μ²μμ λ³μ¬ nλͺ μ κ°μ§κ³ μμ΅λλ€.
- 맀 λΌμ΄λλ§λ€ enemy[i]λ§λ¦¬μ μ μ΄ λ±μ₯ν©λλ€.
- λ¨μ λ³μ¬ μ€ enemy[i]λͺ
λ§νΌ μλͺ¨νμ¬ enemy[i]λ§λ¦¬μ μ μ λ§μ μ μμ΅λλ€.
- μλ₯Ό λ€μ΄ λ¨μ λ³μ¬κ° 7λͺ μ΄κ³ , μ μ μκ° 2λ§λ¦¬μΈ κ²½μ°, νμ¬ λΌμ΄λλ₯Ό λ§μΌλ©΄ 7 - 2 = 5λͺ μ λ³μ¬κ° λ¨μ΅λλ€.
- λ¨μ λ³μ¬μ μλ³΄λ€ νμ¬ λΌμ΄λμ μ μ μκ° λ λ§μΌλ©΄ κ²μμ΄ μ’ λ£λ©λλ€.
- κ²μμλ 무μ κΆμ΄λΌλ μ€ν¬μ΄ μμΌλ©°, 무μ κΆμ μ¬μ©νλ©΄ λ³μ¬μ μλͺ¨μμ΄ ν λΌμ΄λμ 곡격μ λ§μ μ μμ΅λλ€.
- 무μ κΆμ μ΅λ kλ² μ¬μ©ν μ μμ΅λλ€.
μ€νΈλ 무μ κΆμ μ μ ν μκΈ°μ μ¬μ©νμ¬ μ΅λν λ§μ λΌμ΄λλ₯Ό μ§ννκ³ μΆμ΅λλ€.
μ€νΈκ° μ²μ κ°μ§κ³ μλ λ³μ¬μ μ n, μ¬μ© κ°λ₯ν 무μ κΆμ νμ k, 맀 λΌμ΄λλ§λ€ 곡격ν΄μ€λ μ μ μκ° μμλλ‘ λ΄κΈ΄ μ μ λ°°μ΄ enemyκ° λ§€κ°λ³μλ‘ μ£Όμ΄μ§λλ€. μ€νΈκ° λͺ λΌμ΄λκΉμ§ λ§μ μ μλμ§ return νλλ‘ solution ν¨μλ₯Ό μμ±ν΄μ£ΌμΈμ.
μ νμ¬ν
- 1 ≤ n ≤ 1,000,000,000
- 1 ≤ k ≤ 500,000
- 1 ≤ enemyμ κΈΈμ΄ ≤ 1,000,000
- 1 ≤ enemy[i] ≤ 1,000,000
- enemy[i]μλ i + 1 λΌμ΄λμμ 곡격ν΄μ€λ μ μ μκ° λ΄κ²¨μμ΅λλ€.
- λͺ¨λ λΌμ΄λλ₯Ό λ§μ μ μλ κ²½μ°μλ enemy[i]μ κΈΈμ΄λ₯Ό return ν΄μ£ΌμΈμ.
import heapq
def solution(n, k, enemy):
answer = 0
total_enemy = 0
heap = []
for e in enemy:
# maxHeap -> - λ¬μμ push
heapq.heappush(heap, -e)
# μ λν΄μ£ΌκΈ°
total_enemy += e
# νμ¬κΉμ§ μ μ ν©μ΄ λ³μ¬λ³΄λ€ ν¬λ€λ©΄
if total_enemy > n:
# 무μ κΆμ λ€ μΌλ€λ©΄ break
if k == 0:
break
# 무μ κΆ -= 1
k -= 1
# μ μΌ ν° μ μ heapμμ κ°μ Έμ΄
biggest = heapq.heappop(heap)
# total_enemy += -(μ μΌ ν° μ ) -> λΉΌμ£ΌκΈ°
total_enemy += biggest
# λΌμ΄λ += 1
answer += 1
return answer
βοΈ μλλ 무μ κΆμ μΈ μ μλ κ²½μ°μ μλ₯Ό ꡬνκ³ , κ°μ₯ λ§μ΄ λ²ν΄ λΌμ΄λ μλ₯Ό κ° κ²½μ°μ μλ§λ€ κ³μ°ν΄μ£Όλ €κ³ νλ€. κ·Έλ°λ° μ νμ¬νμ λ²μκ° λμ΄μ μκ°μ΄κ³Όκ° λ¬λ€.
βοΈ Max Heapμ νμ©νμ¬ νμ΄νλ λ°©μμΌλ‘ κ΅μ²΄νκ³ , μκ°μ΄κ³Ό μμ΄ μ λ΅μ΄ λμΆλμλ€!