코딩테스트/Python
[Python] 백준 #2109 - 순회강연
yo~og
2022. 5. 23. 16:15
문제
https://www.acmicpc.net/problem/2109
2109번: 순회강연
한 저명한 학자에게 n(0 ≤ n ≤ 10,000)개의 대학에서 강연 요청을 해 왔다. 각 대학에서는 d(1 ≤ d ≤ 10,000)일 안에 와서 강연을 해 주면 p(1 ≤ p ≤ 10,000)만큼의 강연료를 지불하겠다고 알려왔다.
www.acmicpc.net
풀이
import sys
import heapq
n = int(input())
money = 0
arr = []
for _ in range(n):
tmp = list(map(int,sys.stdin.readline().strip().split()))
arr.append([tmp[0],tmp[1]])
arr = sorted(arr,key=lambda x: (x[1])) # 데드라인 오름차순
queue = []
for pay,day in arr:
heapq.heappush(queue,pay)
if day < len(queue): # 날짜보다 queue의 길이가 더 크면
heapq.heappop(queue) # 최소금액 pop
print(sum(queue))
우선순위 큐를 사용해주었다.
먼저 데드라인으로 오름차순을 해준다.
그 다음, 우선순위 큐에 하나씩 넣어준다.
이때 날짜보다 큐의 길이가 더 길다면 데드라인을 넘은 강의가 있는 것이기 때문에 최소금액을 pop해준다.