티스토리 뷰

 

11508번: 2+1 세일

KSG 편의점에서는 과일우유, 드링킹요구르트 등의 유제품을 '2+1 세일'하는 행사를 하고 있습니다. KSG 편의점에서 유제품 3개를 한 번에 산다면 그중에서 가장 싼 것은 무료로 지불하고 나머지 두

www.acmicpc.net


1. 문제 내용

 

 

2. 접근 방식

  • 최대한 높은 가격을 무료로 지불하자.

세 개로 모은 가격 중에서 가장 적은 가격이, 나머지 제품들보다 비싸면 이득이다. 즉, 입력 받은 제품의 가격을 내림차순 정렬한 후에 3개씩 짝 지으면 된다. 예를 들어 10, 9, 6, 4, 3, 2가 있을 때 (10, 9, 6)과 (4, 3, 2)로 그룹을 나누면, 첫 번째 그룹에서 가장 작은 가격인 6이 두 번째 그룹에 속한 제품의 가격들보다 비싸므로, 구매 비용이 절약된다.

 

 

3. 정답 코드

  • sys.stdin.readline( ): input( )과 동일한 역할이지만, 속도가 훨씬 빠르다.

똑같은 코드이지만 input( )으론 3688ms가 소요되고, sys.stdin.readline( )으론 92ms밖에 안 걸린다.

import sys

input = sys.stdin.readline

n = int(input())
data = [int(input()) for _ in range(n)]

data.sort(reverse=True)

result = 0
for i in range(0, n-2, 3):
    result += data[i] + data[i+1]

for j in range(i+3, n):
    result += data[j]

print(result)
728x90