반응형
#include<iostream>
using namespace std;
int main(){
int n,m;
int packageArray[51];
int singleArray[51];
int result = 0;
cin >> n >> m;
int packageMin = 100000000;
int singleMin = 100000000;
for(int i=0; i<m; i++){
cin >> packageArray[i] >> singleArray[i];
if(packageArray[i] < packageMin){
packageMin = packageArray[i];
}
if(singleArray[i] < singleMin){
singleMin = singleArray[i];
}
}
while(1){
if(n <= 0){
break;
}
if(n >= 6){
if(packageMin < singleMin*6){
result += packageMin;
n -= 6;
}else{
result += singleMin*6;
n -= 6;
}
}else{
if(packageMin < singleMin*n){
result += packageMin;
n = 0;
}else{
result += singleMin*n;
n = 0;
}
}
}
cout << result;
}
코드 줄이 길고 뭔가 더러워보이지만 전형적인 그리디 알고리즘을 사용한 코드이다.
쉬운 그리디 알고리즘답게 약간의 구현 문제의 느낌이 난다. 남은 개수가 6개 이상인지 아닌지 따지고 6개 이상이면 낱개 6개 와 패키지를 비교. 남은 개수가 6개 미만이면 낱개 남은 개수 만큼과 패키지를 비교. 이정도가 핵심이다.
반응형
'코딩 이야기 > 백준 풀이' 카테고리의 다른 글
백준 10158번: 개미 C++코드(애드 혹, Ad hoc) (0) | 2023.04.04 |
---|---|
백준 7576번: 토마토 C++ 코드(BFS) (0) | 2023.03.22 |
백준 1003번: 피보나치 함수 C++ 코드(DP, 다이나믹 프로그래밍) (0) | 2023.03.14 |
백준 23814번: 아 저는 볶음밥이요 C++코드(수학) (0) | 2021.12.27 |
백준 1260번: DFS와 BFS C++코드(DFS, BFS) (0) | 2021.12.21 |