코딩테스트

[백준][Python] 11508 2+1 세일

yeeejji 2024. 4. 2. 22:51
728x90

그리디, 정렬 / 실버 4

🥛

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)