-
[BOJ 11508, Python 3] 2+1 세일알고리즘/BOJ 2021. 8. 3. 15:49반응형
https://www.acmicpc.net/problem/11508
풀이
최솟값을 지불하는 방법을 도출하라고 합니다.
이 말을 살짝 비틀어서 무료로 받을 수 있는 상품의 금액을 최대화한다고 생각해봅시다.
무료로 받는 상품의 금액을 최대화해야하니 최대한 큰 값을 무료로 받으면 좋은 것은 당연합니다.
그러면 내림차순으로 정렬해봅시다.
첫번째 값과 두번째 값은 무조건 사야하고, 세번째로 비싼 상품은 무료로 받을 수 있습니다.
이렇게 1+2, 3무료, 4+5, 6무료, ... 이런 방식으로 사는 것이 최적해인 것을 알 수 있습니다.
코드
123n = int(input())arr = sorted([int(input()) for i in range(n)])[::-1]print(sum(arr[i] for i in range(n) if i % 3 < 2))cs 반응형'알고리즘 > BOJ' 카테고리의 다른 글
[BOJ 19941, Python 3] 햄버거 분배 (0) 2021.08.04 [BOJ 18310, Python 3] 안테나 (0) 2021.08.03 [BOJ 11501, C++, Python 3] 주식 (0) 2021.08.03 [BOJ 11399, Python 3] ATM (0) 2021.08.02 [BOJ 2012, Python 3] 등수 매기기 (0) 2021.08.02