복대가리의 개발

[C#] 백준 (알고리즘)/실버 문제

[백준 - C#] 11508번 2+1 세일

복대가리 2022. 8. 3. 00:14
728x90

문제링크

https://www.acmicpc.net/problem/11508

 

11508번: 2+1 세일

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

www.acmicpc.net

 

문제

KSG 편의점에서는 과일우유, 드링킹요구르트 등의 유제품을 '2+1 세일'하는 행사를 하고 있습니다. KSG 편의점에서 유제품 3개를 한 번에 산다면 그중에서 가장 싼 것은 무료로 지불하고 나머지 두 개의 제품 가격만 지불하면 됩니다. 한 번에 3개의 유제품을 사지 않는다면 할인 없이 정가를 지불해야 합니다.
예를 들어, 7개의 유제품이 있어서 각 제품의 가격이 10, 9, 4, 2, 6, 4, 3이고 재현이가 (10, 3, 2), (4, 6, 4), (9)로 총 3번에 걸쳐서 물건을 산다면 첫 번째 꾸러미에서는 13원을, 두 번째 꾸러미에서는 10원을, 세 번째 꾸러미에서는 9원을 지불해야 합니다.
재현이는 KSG 편의점에서 친구들과 같이 먹을 총 N팩의 유제품을 구입하려고 합니다. 재현이를 도와 최소비용으로 유제품을 구입할 수 있도록 도와주세요!

조건

시간제한 : 1초
메모리 제한 : 64 MB

입력

첫 번째 줄에는 유제품의 수 N (1 ≤ N ≤ 100,000)이 주어집니다.

두 번째 줄부터 N개의 줄에는 각 유제품의 가격 Ci (1 ≤ Ci ≤ 100,000)가 주어집니다.

출력

재현이가 N개의 유제품을 모두 살 때 필요한 최소비용을 출력합니다. 정답은 2
31
-1보다 작거나 같다.

 

문제정리

1. 3개를 한번에 사면 가장 싼 것은 무료로 지불
2. 3개를 한번에 사지 않으면 모두 지불
3. 최소비용으로 유제품을 구입

이번 문제의 경우 유제품을 최소비용으로 사는 문제입니다.

입력 받은 모든 제품의 가격을 내림차순으로 정렬하고 값을 무료로 지불해야 최소비용을 구할 수 있습니다.

 

예를들어  10, 9, 4, 2, 6, 4, 3 을 내림차순으로 하면 10, 9, 6, 4, 4, 3, 2이고 3개식 묶어서 버린다면

 

(10, 9, 6) => 6 무료

(4, 4, 3) => 3 무료

(2) 

 

최소비용으로 구매할 수 있습니다.

C# 코드

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
static void Main(string[] args)
{
    StreamWriter writer = new StreamWriter(OpenStandardOutput());
    StreamReader reader = new StreamReader(OpenStandardInput());
 
    int N = int.Parse(reader.ReadLine());
    int[] dairy = new int[N];
 
    for (int i = 0; i < N; i++)
        dairy[i] = int.Parse(reader.ReadLine());
 
    // 내림차순으로 정렬
    Array.Sort(dairy);
    Array.Reverse(dairy);
 
    int cost = 0;
    for (int i = 0; i < N; i++)
    {
        if (i % 3 == 2// 세번째 값은 cost에 더하지 않고 패스
            continue;
 
        cost += dairy[i];
    }
 
    writer.WriteLine(cost);
 
    writer.Close();
    reader.Close();
}
cs

읽어주셔서 감사합니다 오늘도 즐거운 하루 되세요.

 

728x90