백준 #2109 순회강연
문제 설명
d
일 안에 와서 강연을 해주면 p
만큼의 강연료를 받는 여러개의 강의가 주어진다.
d
일동안 강연료를 최대로 받아야하는 문제
코드
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)
풀이
d
와 p
를 받아와서 d
를 기준으로 오름차순 정렬, 그리고 p
를 기준으로 내림차순 정렬 후에 우선순위 큐를 이용해서 풀었다.
최초의 day
를 0으로 설정 후에 받아온 d
와 p
를 가지고 만약 day
가 현재 d
를 따라가지 못한다면, 즉 d
보다 작다면 day
를 d
로 설정해주었다.
day
와 d
가 일치한다면 받아온 p
를 넣어주고 day
길이 만큼의 강연료들만 남겨주었다.
마지막으로 하나씩 pop
해주면서 더해주었다.
이게 얼마만의 포스팅이지…ㅜ
댓글남기기