프로그래밍/Algorithm

백준 5545 최고의피자 파이썬

모지사바하 2021. 3. 17. 18:03

www.acmicpc.net/problem/5545

 

5545번: 최고의 피자

첫째 줄에 토핑의 종류의 수 N(1 ≤ N ≤ 100)이 주어진다. 둘째 줄에는 도우의 가격 A와 토핑의 가격 B가 주어진다. (1 ≤ A, B ≤ 1000) 셋째 줄에는 도우의 열량 C가 주어진다. (1 ≤ C ≤ 10000) 다음 줄

www.acmicpc.net

N = int(input())
A, B = map(int, input().split())
C = int(input())
D = []
for _ in range(N):
    D.append(int(input()))
    
D.sort(reverse=True)

current_price = A
current_calories = C
max_calories = C / A

for toping_calories in D:
    temp_calories = current_calories + toping_calories
    temp_price = current_price + B
    
    if temp_calories / temp_price > max_calories:
        max_calories = temp_calories / temp_price
        
        current_calories=temp_calories
        current_price=temp_price
    else:
        break

print(int(max_calories))

# 3
# 12 2
# 200
# 50
# 300
# 100

이건 뭐... 그냥 너무 쉬운 문제라.. 

우선 토핑들의 칼로리를 내림차순으로 정렬한후,

도우의 1원당 칼로리와 지불해야할 금액을 저장해놓고

토핑들의 칼로리를 순회하면서

저장된 금액에 토핑 가격 추가, 저장된 칼로리에 토핑 칼로리를 추가한 후,

1원 당 칼로리를 계산하여 이전에 계산해놨던 1원당 칼로리보다 높으면 최대 칼로리를 변경한다.

만약 이전에 계산했던 1원당 칼로리보다 낮다면 토핑의 칼로리를 내림차순으로 정렬했고 모든 토핑의 가격은 동일하기 때문에 

이후 토핑들은 더이상 볼 필요가 없다.