최대로 벌 수 있는 돈 구하기.
입력 | 출력 |
---|---|
7 20 1 2 1 10 3 100 2 8 2 5 20 50 10 | 185 |
: 기한을 key로 비용을 value로 하는 딕셔너리를 만들어 각 기한에 대한 비용을 내림차순 정렬한다.
딕셔너리의 각 기한에 대해 첫번째 비용을 더해 출력한다.
3
1 1
10 2
10 2
일 때, 답은 11이 아닌 20이다. 2일 안에 오면 되기 때문에 1일차에 +10, 2일차에 +10
이러한 경우를 간과했다.
- 기한 기준으로 그래프를 오름차순 정렬
- 힙에 기한에 대한 가격을 넣고, 힙의 길이가 기한보다 크면 못가는 강연이 있는 것이므로 heappop으로 가장 적은 가격을 제거.(최소힙이기 때문)
import sys
import heapq
n = int(sys.stdin.readline())
graph = []
for _ in range(n):
p, d = map(int, sys.stdin.readline().split())
graph.append((d, p))
graph.sort()
q = []
for d, p in graph:
heapq.heappush(q, p)
if len(q) > d:
heapq.heappop(q)
print(sum(q))