20115 에너지 드링크
업데이트:
1. 문제
문제는 링크에 들어가면 있다.
2. 정답 코드
문제의 내 정답 코드는 다음과 같다.
import sys
read = sys.stdin.readline
"""
1. 서로 다른 에너지 드링크를 합친다.
2. 하나를 다른쪽에 다 붓는데, 양의 절반을 흘린다.
3. 빈 에너지 드링크는 버린다.
4. 1~3 반복
에너지 드링크의 양을 최대로 하기
"""
from fractions import Fraction
N = int(read())
drinks = list(map(int,read().split()))
max_d = max(drinks)
idx_d = drinks.index(max_d)
drinks.pop(idx_d)
results = max_d + float(Fraction(sum(drinks),2))
print("{0:.4f}".format(results))
3. 풀이 및 생각
문제 풀이
이 문제는 생각해보면 굉장히 간단하게 풀린다. 핵심은 버리는 양이 최소!가 되게 하는것이다. 버리는 양이 최소가 되게 하려면, 양이 적은 에너지 드링크들만을 버리면 된다. 근데 이게 사실 최대의 양인 드링크를 빼곤 나머지는 다 한번씩 버릴 수 밖에 없는 구조이기 때문에 최대 값만 빼고 나머지를 다 더하고 2로 나눠주면 끝난다.
단 조심해야할 것은 소숫점 자리 출력이다.