Koala - 19기/코딩테스트 심화 스터디

[Python / 백준] 23559 : 밥

sean613 2025. 7. 26. 15:05

문제

 

https://www.acmicpc.net/problem/23559

 

제주대 학생회관 식당에는 두 개의 메뉴가 있다. 코너 A로 가면 5,000원짜리 메뉴를 먹을 수 있고, 코너 B로 가면 1,000원짜리 메뉴를 먹을 수 있다.

준원이는 대면 수업이 시작되는 바람에 이제 남은 학기의 일동안 매일 학식의 두 메뉴 중 정확히 하나를 골라서 먹어야 한다. 일간의 두 메뉴는 이미 공지되어 있고, 준원이는 이미 모든 날의 각 메뉴가 얼마나 맛있을지 수치를 매겨 두었다.

준원이는 일간 학식에 총 원 이하를 써야 한다.

여러분이 일간 준원이의 메뉴를 잘 골라서, 고른 메뉴의 맛의 합을 최대화 해주자!

 

입력

첫째 줄에는 두 정수 , 가 주어진다.

둘째 줄부터 개의 줄에, 각 날에 먹을 수 있는 5,000원짜리 메뉴의 맛 와 1,000원짜리 메뉴의 맛 가 공백을 사이에 두고 주어진다.

 

출력

준원이가 고른 메뉴들의 맛의 합을 최대화했을 때의 값을 출력하라.


Algorithm

모든 메뉴를 1000원 짜리로 가정하고 예산과 맛을 구한다

일자 당 비싼 점심과 싼 점심의 맛 차이를 구한다

맛 차이를 내림차순으로 정렬 후 예산이 되는 한 차이가 큰 것 부터 맛에 추가한다. (단 차이가 음수로 나오는 경우 추가를 중단한다)

이후 최종적으로 나온 맛 점수를 출력한다

 


 

 

Code

import sys
input = sys.stdin.readline

N, X = map(int,input().split())

price = [tuple(map(int,input().split())) for _ in range(N)]

cnt = 0

X -= 1000 * N
diff = []

for a, b in price:
    diff.append(a - b)
    cnt += b
diff.sort(reverse=True)
for c in diff:
    if X >= 4000 and c > 0:
        X -= 4000
        cnt += c
    elif c <= 0:
        break

print(cnt)