728x90
문제 링크
문제 요약
두 에너지 드링크 a, b가 있고, 양이 각각 Xa, Xb라 할 때, 다음 둘 중 하나의 선택을 할 수 있다.
-
a의 양을 Xa + (Xb / 2)로 만들고, b를 버리기
-
b의 양을 Xb + (Xa / 2)로 만들고, a를 버리기
위의 방식으로 에너지 드링크를 합쳐서 그 양을 최대로 하자.
접근
그리디 문제이고 접근법도 굉장히 쉽습니다.
그냥 가장 양이 많은 드링크에 그다음 양이 많은 드링크를 부어버리면 됩니다.
이 과정을 하나의 드링크만 남을 때까지 반복하면 되는 문제입니다.
코드
1
2
3
4
5
6
7
8
9
10
|
import sys
input = sys.stdin.readline
n = int(input())
a = list(map(int,input().split()))
a.sort(reverse=True)
sum = a[0]
for i in range(1,n):
sum += (a[i]/2)
print('%g'%sum)
|
cs |
참고로 그냥 print(sum)을 하게 되면 첫 예제에서 20이 아닌 20.0을 출력하면서 틀리게 됩니다.
20.0의 소수점 아래 0을 날리는 방법은 제가 사용한 것처럼 '%g'로 포맷팅 해주시면 됩니다.
이게 가능한 이유는 공식 문서에서 확인할 수 있었는데요.
docs.python.org/ko/3/library/string.html#formatspec
'g' 포맷팅에 관한 내용에서 중요한 부분을 형광펜으로 칠해봤습니다. 유효하지 않은 후행 0은 모두 유효숫자부에서 제거되는 특성이 있기에 해당 문제에서 사용할 수 있었습니다.
728x90
'알고리즘 > ps' 카테고리의 다른 글
[python] 백준 3190 뱀 (0) | 2021.03.31 |
---|---|
[파이썬] 백준 바이러스 2606번 (0) | 2021.03.17 |
[python] 백준 10799 쇠막대기 (0) | 2021.02.04 |
[python] 백준 1339 단어수학 (0) | 2021.01.10 |
[python] 백준 1946 신입사원 (0) | 2021.01.04 |