백준

[백준] 17503 맥주 축제 [Python, 파이썬]

YoonJuHan 2023. 11. 5. 22:02
  • 문제 : https://www.acmicpc.net/problem/17503
  • 🔑 이분 탐색
    • 맥주 종류를 선호도 기준으로 내림차순 정렬
    • mid값 (간 레벨)을 기준으로 정해진 개수만큼 맥주를 마시고 선호도를 채울 수 있는지를 확인
    • 만족한다면 mid값을 계속 낮춰보고 최솟값을 찾으면 끝 ✨

 

 

import sys
input = sys.stdin.readline

n, m, k = map(int, input().split())
bear = [list(map(int, input().split())) for _ in range(k)]
bear.sort(reverse=True)

l = 0
r = 2**31

while l <= r:
    mid = (l+r) // 2        # 간 레벨

    sum_p = 0               # 먹은 맥주 선호도 합
    drink = 0               # 먹은 횟수
    for p, level in bear:   
        if mid >= level:    # 간 레벨 >= 도수
            sum_p += p
            drink += 1
        if drink == n:      # 먹을 만큼 먹었으면 그만 먹어
            break

    if sum_p >= m and drink == n:   # 선호도, 먹은 횟수 만족하면 값 줄여보기
        r = mid - 1
    else:
        l = mid + 1

if r != 2**31:
    print(l)
else:
    print(-1)