:question:문제 설명

d일 안에 와서 강연을 해주면 p만큼의 강연료를 받는 여러개의 강의가 주어진다. d일동안 강연료를 최대로 받아야하는 문제

:pencil2:코드

import sys
input = sys.stdin.readline
from heapq import heappop, heappush


n = int(input())
hq = []
arr = []
for _ in range(n):
    p, d = map(int, input().split())
    arr.append((p, d))

arr.sort(key=lambda x:(x[1], -x[0]))

day = 0
for p, d in arr:
    if d > day:
        day = d

    if day == d:
        heappush(hq, p)
        while len(hq) > day:
            heappop(hq)

ans = 0
while hq:
    ans += heappop(hq)

print(ans)

:memo:풀이

dp를 받아와서 d를 기준으로 오름차순 정렬, 그리고 p를 기준으로 내림차순 정렬 후에 우선순위 큐를 이용해서 풀었다. 최초의 day를 0으로 설정 후에 받아온 dp를 가지고 만약 day가 현재 d를 따라가지 못한다면, 즉 d보다 작다면 dayd로 설정해주었다. dayd가 일치한다면 받아온 p를 넣어주고 day 길이 만큼의 강연료들만 남겨주었다. 마지막으로 하나씩 pop해주면서 더해주었다.

이게 얼마만의 포스팅이지…ㅜ

댓글남기기