먼저 마감일 순서대로 정렬을 하고 , 마감일이 남은 과제면 일단 우선순위 큐에 넣었다.
이 때 우선순위 큐의 길이는 현재 몇일이 지났는지 알 수 있다.
그리고 마감일이 넘었지만 우선순위 큐에 0번째 요소가 현재 보다 작다면
우선순위 큐에 있는 가장 작은 값을 뺐을 때 과제를 할 수 있는 기간이 하루 늘기 때문에 현재 내 과제를 넣으면 된다.
import sys import heapq n = int(input()) lst = [] for i in range(n): x, y = map(int, input().split()) lst.append([x, y]) # 마감일이 작은 과제 부터 정렬 lst.sort(key=lambda x:x[0]) answer = [] for i in range(len(lst)): # 마감일이 남았다 일단 넣어 if len(answer) < lst[i][0]: heapq.heappush(answer, lst[i][1]) # 마감일이 넘었어 근데 내 과제중 가장 점수가 낮은 것보다 내가 이 과제를 하면 점수를 더 많이받아 그러면 그거 빼고 이거 넣자 else: if answer[0] < lst[i][1]: heapq.heappop(answer) heapq.heappush(answer, lst[i][1]) print(sum(answer))