728x90
🥛
https://www.acmicpc.net/problem/11508
11508번: 2+1 세일
KSG 편의점에서는 과일우유, 드링킹요구르트 등의 유제품을 '2+1 세일'하는 행사를 하고 있습니다. KSG 편의점에서 유제품 3개를 한 번에 산다면 그중에서 가장 싼 것은 무료로 지불하고 나머지 두
www.acmicpc.net
내 풀이
N = int(input())
C = []
ans = 0
for _ in range(N):
C.append(int(input()))
C = sorted(C, reverse=True) # 내림차순 정렬
while len(C) >= 3: # 한 번에 3개의 유제품을 사는 경우
dairy = C[0:3]
ans += sum(dairy) - min(dairy)
del C[0:3]
if len(C) > 0: # 남은 유제품이 있다면
ans += sum(C)
print(ans)
코드 설명
가장 비싼 유제품을 3개씩 묶어서 계산하는 것이 유제품을 최소 비용으로 구입할 수 있는 방법이다.
유제품의 가격을 내림차순 정렬 해준다.
C = sorted(C, reverse=True) # 내림차순 정렬
한 번에 3개의 유제품을 살 때, 2+1 할인이 들어간다.
dairy: 현재 남아있는 유제품 중, 가장 비싼 유제품 3개의 가격 리스트
정답 변수(ans)에 가장 싼 유제품을 제외한 나머지 두 유제품의 가격을 더해준다.
그리고, 계산한 유제품 3개의 가격은 리스트에서 삭제한다.
슬라이스를 삭제하기 위해 del 키워드를 사용하였다.
while len(C) >= 3: # 한 번에 3개의 유제품을 사는 경우
dairy = C[0:3]
ans += sum(dairy) - min(dairy)
del C[0:3]
while문 종료 후에 유제품이 남아있다면, 할인 없이 정가를 지불해야 한다.
if len(C) > 0: # 남은 유제품이 있다면
ans += sum(C)
'코딩테스트' 카테고리의 다른 글
[백준][Python] 1189 컴백홈 (0) | 2024.04.14 |
---|---|
[백준][Python] 2960 에라토스테네스의 체 (0) | 2024.04.13 |
[백준][Python] 11723 집합 (0) | 2024.04.01 |
[백준][Python] 10431 줄세우기 (0) | 2024.03.31 |
[백준][Python] 22251 빌런 호석 (0) | 2024.03.30 |