일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 알고리즘
- c++
- object detection
- 가끔은 말로
- 미래는_현재와_과거로
- 우선 순위 큐
- dropout
- 회고록
- 다익스트라
- 크루스칼
- BFS
- 자바스크립트
- 문자열
- 2023
- lazy propagation
- 분할 정복
- dfs
- back propagation
- pytorch
- 너비 우선 탐색
- DP
- Overfitting
- NEXT
- 백트래킹
- 플로이드 와샬
- tensorflow
- 세그먼트 트리
- 조합론
- 가끔은_말로
- 이분 탐색
Archives
- Today
- Total
Doby's Lab
백준 15720번: 카우버거 (C++) 본문
https://www.acmicpc.net/problem/15720
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;
}
728x90
'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 |