티스토리 뷰

728x90

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

 

5545번: 최고의 피자

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

www.acmicpc.net

 

문제에서 중복 토핑을 선택할 수 없다는 문구를 보고 중복 작업 관련해서 고민했던 문제입니다.

내림차순으로 정렬할 시, 같은 값이 중복으로 들어가는 순간 분모 값이 증가해 열량이 줄어듭니다.

그래서 핵심은 따로 중복처리를 할 필요없이 내림차순으로 정렬하여 최댓값을 구하면 자연스럽게 중복 처리가 되는 문제입니다.

 

 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
= int(input())
A, B = map(int, input().split())
= int(input())
lst, res = [], 0
for _ in range(N):
    lst.append(int(input()))
 
lst = sorted(lst, reverse=True)
for i in range(len(lst)+1):
    price = A + B * i
    res = max(res, (C+sum(lst[:i]))//price)
print(res)
 
cs

 

댓글