문제 링크입니다: https://www.acmicpc.net/problem/15720
기말고사 전에 풀었던 중앙대 CodeRace 2018을 마저 풀기로 마음을 먹었습니다.
카우버거 문제는 C++에서 정렬 알고리즘을 제공하기 때문에 쉽게 풀 수 있었습니다.
버거, 사이드 메뉴, 음료의 갯수 중 제일 작은 값이 세트의 갯수입니다.
버거, 사이드 메뉴, 음료를 내림차순 정렬한 다음에 세트의 갯수만큼은 10% 할인해주고 나머지는 정상가격으로 더해주면 쉽게 풀 수 있는 문제였습니다.
#include <iostream>
#include <vector>
#include <algorithm>
#include <functional>
using namespace std;
const int MAX = 1000 + 1;
int B, C, D;
vector<int> burger, side, beverage;
void discount(void)
{
int sum = 0;
sort(burger.begin(), burger.end(), greater<int>()); //내림차순 정렬
sort(side.begin(), side.end(), greater<int>()); //내림차순 정렬
sort(beverage.begin(), beverage.end(), greater<int>()); //내림 차순 정렬
int setNum = min(burger.size(), min(side.size(), beverage.size()));
for (int i = 0; i < setNum; i++)
{
sum += burger[i] * 0.9;
sum += side[i] * 0.9;
sum += beverage[i] * 0.9;
}
//나머지는 정상가
for (int i = setNum; i < burger.size(); i++)
sum += burger[i];
for (int i = setNum; i < side.size(); i++)
sum += side[i];
for (int i = setNum; i < beverage.size(); i++)
sum += beverage[i];
cout << sum << endl;
}
int main(void)
{
cin >> B >> C >> D;
int sum = 0;
//버거 정상가격
for (int i = 0; i < B; i++)
{
int price;
cin >> price;
burger.push_back(price);
sum += price;
}
//사이드 메뉴 정상가격
for (int i = 0; i < C; i++)
{
int price;
cin >> price;
side.push_back(price);
sum += price;
}
//음료 정상가격
for (int i = 0; i < D; i++)
{
int price;
cin >> price;
beverage.push_back(price);
sum += price;
}
cout << sum << endl; //정상가격
discount();
return 0;
}
개발환경:Visual Studio 2017
지적, 조언, 질문 환영입니다! 댓글 남겨주세요~
'알고리즘 > BOJ' 카테고리의 다른 글
백준 1182번 부분집합의 합 (0) | 2018.06.16 |
---|---|
백준 2309번 일곱난쟁이 (2) | 2018.06.16 |
백준 1916번 최소비용 구하기 (0) | 2018.06.15 |
백준 13703번 물벼룩의 생존확률 (0) | 2018.06.15 |
백준 15820번 맞았는데 왜 틀리죠? (0) | 2018.06.15 |