11508 2+1 세일
업데이트:
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 신경을 쓰지 않고 손쉽게 코딩을 할 수 있다.
나의 생각
이 문제는 다소 쉬운 편이다. 그래도 그리디는 꾸준히 풀어주는게 좋다.