0. 문제 링크
https://school.programmers.co.kr/learn/courses/30/lessons/142085
1. 풀이 방법
- 일단 문제를 보면 최소 비용으로 막아야 되는 게 확실하고, K개는 무손실로 막을 수 있다.
- 따라서 적군이 들어올때마다 힙에다가 집어넣는다.
- 만약 힙의 크기가 K를 넘는다면, 가장 작은 적군의 수를 빼서 나의 병사에서 뺀다.
- 결론적으로 가장 작은 적군만 선택해서 막은 상태가 된다.
2. 코드
import heapq
def solution(n, k, enemy):
answer = 0
l = len(enemy)
if k >= l: # 모두 다 막을 수 있음
return l
hp = list()
for i in range(k): # k개까지는 일단 때려박음
heapq.heappush(hp, enemy[i])
while n >= 0 and (i := i + 1) < l: # n이 0보다 크거나 같고, i에는 1을 계속 더함
heapq.heappush(hp, enemy[i]) # 일단 새로 오는 적을 넣음
n -= heapq.heappop(hp) # k의 한도 내에서 가장 작은 애를 뺌. 그러면 hp 안에는 i 라운드까지 중에 가장 큰 적들이 들어가있음
return i
3. 마무리
'Computer Science > 알고리즘' 카테고리의 다른 글
[프로그래머스 - Python] 86052 - 빛의 경로 사이클 (0) | 2023.10.15 |
---|---|
[프로그래머스 - Python] 118667 - 두 큐 합 같게 만들기 (1) | 2023.10.15 |
[프로그래머스 - Python] 150368 - 이모티콘 할인행사 (0) | 2023.10.15 |
[프로그래머스 - Python] 138476 - 귤 고르기 (1) | 2023.10.15 |
[백준 - Python] 2638 - 치즈 (0) | 2023.10.15 |