https://www.acmicpc.net/problem/20115
문제의 접근 방법
- 합쳐진 에너지 드링크의 양을 최대로 하기 위해 입력된 에너지 드링크의 양을 내림차순으로 정렬하기
- 임의의 서로 다른 두 에너지 드링크를 고를 때, 두 개 중 더 양이 적은 에너지 드링크를 버리기
- 작은 숫자들을 이용해서 여러 조합을 그려보기 =>> 큰 수부터 나열해야 함을 알 수 있음
내가 막혔던 부분
- 아이디어는 생각했지만 코드로 구현하는 과정에서 시간이 조금 소요됨.
문제 풀이 방법
(1) 에너지 드링크 수(N) 입력받기
(2) N개의 에너지 드링크들의 양을 입력받아 리스트 x의 형태로 저장한 후, 내림차순으로 정렬하기
(3) 양을 누적해서 더하기 위해 초기에 선언한 변수 amount를 리스트 x의 제일 첫 번째 값으로 초기화하기
-> 이후에 합쳐진 에너지 드링크의 양을 더할 때, 제일 처음에 선택한 에너지 드링크(최댓값)는 무조건 더해지기 때문!
(4) (3)에서 선언해 둔 변수 amount에 절반을 흘리게 되는 에너지 드링크의 양을 누적해서 더해주기
-> 계속해서 양이 더 많은 에너지 드링크에 합쳐지기 때문에 x[0](최댓값)을 제외하고 x[1]이 선택되게 됨!
(5) 두 에너지 드링크 중 절반을 바닥에 흘린 에너지 드링크는 버려지기 때문에 x[1]을 제거해주기
(6) (4)~(5) 과정을 x[0](최댓값)만 남을 때까지 반복하기
(7) 합쳐진 에너지 드링크 양 amount 출력해주기
소스코드
N = int(input()) # 에너지 드링크 수
x = sorted(list(map(int, input().split())), reverse=True)
# 에너지 드링크의 양
amount = x[0]
for _ in range(len(x)-1):
amount += x[1]/2
del x[1]
print(amount)
'백준 write-up > 정렬 & 그리디' 카테고리의 다른 글
[백준] 거스름돈 : 14916번 - Python (0) | 2021.10.07 |
---|---|
[백준] 포인트 카드 : 14471번 - Python (0) | 2021.10.04 |
[백준] 책 정리 : 1434번 - Python (0) | 2021.09.06 |
[백준] 모두의 마블 : 12845번 - Python (0) | 2021.09.03 |
[백준] 팬덤이 넘쳐흘러 : 17262번 - Python (0) | 2021.09.02 |