코딩테스트/백준

[백준] 11508번 2+1 세일 (C++)

Deff_a 2025. 2. 12. 21:59

문제

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

 

이 문제는 제목 그대로 물건을 3개 샀을 때, 해당 묶음에서 가장 싼 제품을 무료로 줄 때, 최소 비용을 출력하는 문제이다.

풀이

최소 비용을 만들기 위해서는 가장 비싼 제품을 무료로 받으면 된다.

 

가장 비싼 제품을 무료로 받기 위해서는 내림차순 정렬을 이용하여 3개씩 구매하면 무료로 받을 수 있는 가장 비싼 제품들을 고를 수 있다.

#include <bits/stdc++.h>

using namespace std;

bool cmp (int a, int b)
{
	return a > b;
}
int main()
{
	ios_base::sync_with_stdio(0);
	cin.tie(0);

	int n;
	cin >> n;

	vector<int> v(n);
	for (int i = 0; i < n; i++)
	{
		cin >> v[i];
	}

	sort(v.begin(), v.end(), cmp);
	int count = 0, sum = 0;
	for(int i = 0; i < n; i++)
	{
		if(count < 2)
		{
			sum += v[i];
			count++;
		}
		else
		{
			count = 0;
		}
	}

	cout << sum;
	return 0;
}