업데이트:

카테고리: ,

1. 문제

문제는 링크에 들어가면 있다.

2. 정답 코드

문제의 내 정답 코드는 다음과 같다.

import sys
read = sys.stdin.readline
N = int(read())
array = []
for _ in range(N):
    array.append(int(read()))

# 역순으로 정렬하면, 가장 비싼것들부터 나열됨.
array.sort(reverse=True)
# 가장 비싼것들 중 3번째 있는 건 가장 싼거보다 비싼건 맞으니까. 차라리 싼걸 돈 내는게 절약하는 방법.
from collections import deque
array = deque(array)
result = 0
while array :
    if len(array) >= 3:
        a = array.popleft()
        b = array.popleft()
        array.popleft()
        result = result + a + b
    else :
        result += sum(array)
        break

print(result)





3. 풀이 및 생각


문제 풀이

이 문제의 핵심은 내림차순으로 정렬이다. 큰 값들끼리 모여서 그 중 작은 값을 무료로 하는 것이 값싼 제품들을 무료로 하는 것 보다 훨~씬 돈을 절약할 수 있기 때문에, 내림차순으로 정렬을 해야한다. 그리고 3개씩 묶되, 일반적인 list를 쓰는거보다 queue를 써서 popleft()를 쓰면 index 신경을 쓰지 않고 손쉽게 코딩을 할 수 있다.


나의 생각

이 문제는 다소 쉬운 편이다. 그래도 그리디는 꾸준히 풀어주는게 좋다.

최대 1 분 소요