문제풀이/백준(Boj) 문제풀이
[백준][자료구조/힙] 1202. 보석도둑(파이썬/Python)
얄루몬
2022. 1. 25. 21:07
import sys
import heapq
input = sys.stdin.readline
n,k = map(int,input().split())
bag = []
jewely = []
candidate = []
answer = 0
for _ in range(n):
weight, price = map(int,input().split())
heapq.heappush(jewely,[weight,price])
for _ in range(k):
bag.append(int(input()))
bag.sort()
for i in bag:
while jewely and i >= jewely[0][0]:
weight, price = heapq.heappop(jewely)
heapq.heappush(candidate,-price)
#for문을 돌 때만, 그러니까 딱 가방수만큼만 최대힙으로 저장된 값이 answer에 더해짐
if candidate:
answer -= heapq.heappop(candidate)
print(answer)
[나름의 해석]
- 가방의 수만큼만 돌아야 하기에 가방을 기준으로 반복문을 돌리는 것이다.
- 또한 가방의 수만큼 돌아가는 동안 jewely(일반적으로 heap이라고 생각해도 됨)에 저장된 weight가 지금 도는 가방이 버틸 수 있는 무게보다 작은 값들을 모두 candidate(후보자)라는 리스트에 넣어준다
- 그 후 마지막에 제일 작은 값(음수로 넣어주었기 때문에)부터 꺼내 가방의 수만큼만 나오게 한다.
- bag.sort()를 해주는 이유는 아마도 힌트 때문일 것이다.