문제출처 : https://www.acmicpc.net/problem/17503
입력을 받은 후에 도수를 기준으로 정렬을 해준다.
선호도 heap을 하나 만든후에 도수 기준으로 정렬된 리스트를 돌며
len(heap)이 n이하 일때는 heappush를 해주고 같을 경우에는 선호도m을 채웠는지 확인한다. 만약 채우지 못했다면 heappop을 해주고 계속 진행한다.
for문이 끝난 후에도 값이 return 되지 않았다면 채울수 없는것이므로 -1을 return 한다.
처음에는 sum()함수를 사용 선호도m을 확인했는데 시간초과가 떳다....
import sys
import heapq
def solve():
input = sys.stdin.readline
n,m,k = map(int,input().split())
beer = []
likes=[]
for _ in range(k):
a,b = map(int,input().split())
beer.append((a,b))
beer.sort(key=lambda x:x[1])
hap = 0
for i in beer:
if len(likes) < n:
heapq.heappush(likes,i)
hap += i[0]
if len(likes) == n:
if hap >= m:
return i[1]
else:
hap -= heapq.heappop(likes)[0]
else:
return -1
print(solve())