728x90
시간 제한 : 1초
메모리 제한 : 128MB
입력
첫째 줄에는 주문한 버거의 갯수 B, 사이드 메뉴의 갯수 C, 음료의 갯수 D가 공백을 사이에 두고 순서대로 주어진다. (1 ≤ B, C, D ≤ 1,000)
둘째 줄에는 각 버거의 가격이 공백을 사이에 두고 주어진다.
셋째 줄에는 각 사이드 메뉴의 가격이 공백을 사이에 두고 주어진다.
넷째 줄에는 각 음료의 가격이 공백을 사이에 두고 주어진다.
각 메뉴의 가격은 100의 배수이며, 10000원을 넘지 않는다.
출력
첫째 줄에는 세트 할인이 적용되기 전 가격을 출력한다.
둘째 줄에는 세트 할인이 적용된 후의 최소 가격을 출력한다.
소스코드
#include <iostream> #include <algorithm> using namespace std; int main(void) { int b, c, d, tmp, i; int burger[1000], side[1000], drink[1000]; int sum = 0, ans = 0; cin >> b >> c >> d; for (i = 0; i < b; i++) { cin >> burger[i]; sum += burger[i]; } for (i = 0; i < c; i++) { cin >> side[i]; sum += side[i]; } for (i = 0; i < d; i++) { cin >> drink[i]; sum += drink[i]; } sort(burger, burger + b); sort(side, side + c); sort(drink, drink + d); for (i = 0; b - i >= 1 && c - i >= 1 && d - i >= 1; i++) { ans += (burger[b - 1 - i] + side[c - 1 - i] + drink[d - 1 - i])*0.9; } for (int j = 0; j < b - i; j++) ans += burger[j]; for (int j = 0; j < c - i; j++) ans += side[j]; for (int j = 0; j < d - i; j++) ans += drink[j]; cout << sum << endl << ans; }
Tip
그리디로 접근하자. 햄버거, 사이드 메뉴, 음료를 모두 정렬해서 비싼 것들부터 우선적으로 세트메뉴로 만드는 방식으로 문제를 풀면 된다.
728x90
'Computer Science > Algorithm Problem' 카테고리의 다른 글
백준] 4539 - 반올림(ACM-ICPC Regionals) (0) | 2018.07.16 |
---|---|
백준] 2740 - 행렬 곱셈 (0) | 2018.07.13 |
백준] 3076 - 상근이의 체스판(COCI 2012/2013) (0) | 2018.07.09 |
백준] 2804 - 크로스워드 만들기(COCI 2011/2012) (0) | 2018.06.28 |
백준] 2502 - 떡 먹는 호랑이(KOI 2008 지역본선) (0) | 2018.06.22 |