[백준] 최고의 피자_5545번
[백준] 최고의 피자
문제
링크 : BOJ
풀이
문제는 피자의 가격당 최고의 열량을 구하는 것이다.
토핑의 열량을 내림차순으로 정렬하고 값이 많아질수록 피자의 가격당 열량이
많아지다가 낮아지는 부분을 찾아서 그 전 값을 출력한다.
- topping 내림 차순 정렬
- 피자의 가격 당 열량 계산 후, 이전 피자의 가격 당 열량과 비교 (초기값은 토핑이 없을 때로 지정한다.)
n = int(input())
a, b = map(int, input().split())
c = int(input())
topping = []
for _ in range(n):
topping.append(int(input()))
topping = sorted(topping,reverse=True)
result = c/a
s = 0
for k in range(1, n+1):
s += topping[k-1]
if ((c + s) / (a+b*k)) < result:
break
result = (c + s) / (a+b*k)
print(int(result))
실수했던 점
-
피자의 가격당 열량을 구할 때, 가격당 도우의 열량, 가격당 토핑의 열량을 합했을 때 열량으로 생각했다.
이게 왜 안맞는지 고민하는 것 때문에 시간이 소요된 것 같다. -
이전 답안에서는 평균 값을 이용해서 대소 비교를 통해 최고의 피자를 구했다. B / A < D / C 이면 B / A < (B+D) / (A+C) 이다. 즉, (B + D1 / A + C) < D2 / C 이면 (B + D1 / A + C) < (B + D1 + D2 / A + 2*C) 이다. 도우의 평균과 토핑의 평균을 비교한 후,
도우의 평균이 더 작다면 도우의 평균에 더해주고, 다음 평균을 구해 비교해준다.
도우의 평균이 더 크다면 도우의 평균에 더해줬을 때 값이 더 작게 되므로, 현재까지 더해준 도우의 평균이 정답이다.