Algorithm

[우선순위큐,정렬] 백준-2109 순회강연 골드3 (Python)

차노도리 2023. 4. 15. 12:31

백준-2109 : 순회강연

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

 

풀이

  • 입력 받은 정보를 날짜 순으로 정렬을 한다.
  • 정렬한 데이터를 꺼내면서 우선순위 큐에 넣으며 우선순위 큐의 크기가 날짜보다 클경우 가장 작은 비용의 값을 꺼낸다.

 

코드 (python)

import sys
import heapq

def input():
    return sys.stdin.readline().rstrip()


n = int(input()) 

infoList = [list(map(int, input().split(" "))) for _ in range(n)]

#날짜 순으로 정렬
infoList.sort(key=lambda x : x[1])

pq=[]

for pay, day in infoList:
    heapq.heappush(pq,pay)
    # 강연일 보다 더 크다면 가장 작은값 제거
    if day < len(pq):
        heapq.heappop(pq)

print(sum(pq))