# 보석 도둑
import sys
import heapq
input = sys.stdin.readline
N, K = map(int, input().split())
gem = []
for _ in range(N):
weight, cost = map(int, input().split())
heapq.heappush(gem, (weight, cost))
bags = []
for _ in range(K):
w = int(input())
bags.append(w)
bags.sort()
result = 0
temp = []
for bag_weight in bags:
while gem:
if bag_weight >= gem[0][0]:
weight, cost = heapq.heappop(gem)
heapq.heappush(temp, -cost)
else:
break
if temp:
result -= heapq.heappop(temp)
print(result)
자료구조(힙)
1. 보석을 gem리스트에 최소힙으로 push (무게 기준)
2. bags 리스트에 가방의 한도무게를 append하고 오름차순 정렬
3. 가방 개수 만큼 반복
- 가방 한도무게 >= gem리스트의 가장 작은 무게 이면 temp리스트에 최대힙으로 push
- 해당 가방의 한도무게보다 작은 무게를 가진 보석들(temp리스트) 중에서 가치가 가장 큰값을 result에 더해줌
4. result출력
조금 꼬았는데 솔루션 찾기까지 오래걸렸다..
'Algorithm > BOJ' 카테고리의 다른 글
[백준] 1300번 - K번째 수 (파이썬) (0) | 2022.01.31 |
---|---|
[백준] 9466번 - 텀 프로젝트 (파이썬) (0) | 2022.01.31 |
[백준] 17135번 - 캐슬 디펜스 (파이썬) (0) | 2022.01.30 |
[백준] 4195번 - 친구 네트워크 (파이썬) (0) | 2022.01.29 |
[백준] 9935번 - 문자열 폭발 (파이썬) (1) | 2022.01.28 |