728x90
https://www.acmicpc.net/problem/11508
11508번: 2+1 세일
KSG 편의점에서는 과일우유, 드링킹요구르트 등의 유제품을 '2+1 세일'하는 행사를 하고 있습니다. KSG 편의점에서 유제품 3개를 한 번에 산다면 그중에서 가장 싼 것은 무료로 지불하고 나머지 두
www.acmicpc.net
접근 방법
3개씩 묶어서 구매할 때, 가장 싼 제품을 무료로 준다는 것이 핵심이다.
금액을 최소로 만들기 위해서는 가장 싼 제품으로 가격이 꽤 나가는 제품이 선정되어야한다.
이를 위해선 나머지 두 제품이 가장 비싼 제품으로 선정되어야 한다는 것이다.
다시 말해, 금액을 내림차순으로 정렬 후, 3개씩 묶어서 구매하면 된다.
정석적인 그리디 접근법으로 다가가면 쉽게 풀 수 있는 문제이다.
코드
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
#define MAX 100001
int n;
vector<int> v;
bool cmp(int a, int b) {
return a > b;
}
int main() {
ios::sync_with_stdio(false);
cin.tie(0);
cin >> n;
for (int i = 0; i < n; i++) {
int tmp;
cin >> tmp;
v.push_back(tmp);
}
sort(v.begin(), v.end(), cmp);
long long sum = 0;
for(int i = 0; i < n;) {
if (i + 3 <= n) {
sum += (v[i] + v[i + 1]);
i += 3;
}
else {
//cout << "v[i] : " << v[i] << endl;
sum += v[i];
i++;
}
}
cout << sum;
}
728x90
'📊알고리즘 > BOJ' 카테고리의 다른 글
[그리디 #11] BOJ 20300 - 서강근육맨 (0) | 2024.02.12 |
---|---|
[그리디 #10] BOJ 20115 - 에너지 드링크 (0) | 2024.02.12 |
[그리디 #8] BOJ 1758 - 알바생 강호 (0) | 2024.02.11 |
[그리디 #7] BOJ 13305 - 주유소 (0) | 2024.02.10 |
[그리디 #6] BOJ 1343 - 폴리오미노 (0) | 2024.02.10 |