백준 17503번 맥주 축제

highway92·2021년 10월 11일
0

백준

목록 보기
20/27

문제출처 : https://www.acmicpc.net/problem/17503

풀이과정

  1. 입력을 받은 후에 도수를 기준으로 정렬을 해준다.

  2. 선호도 heap을 하나 만든후에 도수 기준으로 정렬된 리스트를 돌며
    len(heap)이 n이하 일때는 heappush를 해주고 같을 경우에는 선호도m을 채웠는지 확인한다. 만약 채우지 못했다면 heappop을 해주고 계속 진행한다.

  3. for문이 끝난 후에도 값이 return 되지 않았다면 채울수 없는것이므로 -1을 return 한다.

  4. 처음에는 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())
profile
웹 개발자로 활동하고 있습니다.

0개의 댓글

관련 채용 정보