일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 30 | 31 |
Tags
- 2023
- 너비 우선 탐색
- 백트래킹
- dropout
- BFS
- 가끔은_말로
- 세그먼트 트리
- back propagation
- 분할 정복
- dfs
- tensorflow
- 다익스트라
- object detection
- pytorch
- 크루스칼
- 이분 탐색
- lazy propagation
- 우선 순위 큐
- 가끔은 말로
- c++
- 자바스크립트
- 플로이드 와샬
- 문자열
- DP
- Overfitting
- 회고록
- NEXT
- 미래는_현재와_과거로
- 알고리즘
- 조합론
Archives
- Today
- Total
Doby's Lab
백준 15720번: 카우버거 (C++) 본문
https://www.acmicpc.net/problem/15720
15720번: 카우버거
첫째 줄에는 주문한 버거의 개수 B, 사이드 메뉴의 개수 C, 음료의 개수 D가 공백을 사이에 두고 순서대로 주어진다. (1 ≤ B, C, D ≤ 1,000) 둘째 줄에는 각 버거의 가격이 공백을 사이에 두고 주어진
www.acmicpc.net
Solved By: Greedy Algorithm
세트가 만들어질 수 있는 최대의 개수를 minv라고 하겠습니다. 버거에서 minv개까지 내림차순으로 비용에 0.9를 곱합니다.
왜냐하면 세트로 만들었을 때, 어떠한 경우에도 다른 값에 할인을 했다가는 최솟값을 가질 수 없기 때문에 가장 큰 값에 0.9를 곱하여 다 더해주는 것이 맞습니다. => 그리디 알고리즘인 이유
버거와 음료, 사이드 모두 마찬가지이기 때문에 같은 과정을 거칩니다.
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int b, c, d;
vector<int> B, C, D;
bool cmp(int a, int b) {return a > b;}
int main(){
cin >> b >> c >> d;
int minv = min(min(b, c), d);
int sum = 0;
for(int i = 0; i < b; i++){
int v; cin >> v; B.push_back(v);
sum += v;
}
for(int i = 0; i < c; i++){
int v; cin >> v; C.push_back(v);
sum += v;
}
for(int i = 0; i < d; i++){
int v; cin >> v; D.push_back(v);
sum += v;
}
sort(B.begin(), B.end(), cmp);
sort(C.begin(), C.end(), cmp);
sort(D.begin(), D.end(), cmp);
for(int i = 0; i < minv; i++){
B[i] *= 0.9;
C[i] *= 0.9;
D[i] *= 0.9;
}
int sum2 = 0;
for(int i = 0; i < b; i++) sum2 += B[i];
for(int i = 0; i < c; i++) sum2 += C[i];
for(int i = 0; i < d; i++) sum2 += D[i];
cout << sum << '\n' << sum2;
return 0;
}
'PS > BOJ' 카테고리의 다른 글
백준 14565번: 역원(Inverse) 구하기 (C++) (0) | 2022.06.21 |
---|---|
백준 11256번: 사탕 (C++) (0) | 2022.06.19 |
백준 14955번: How Many to Be Happy? (C++) (0) | 2022.06.18 |
백준 14248번: 점프 점프 (C++) (0) | 2022.06.16 |
백준 21010번: Slow Down (C++) (0) | 2022.06.12 |