처음에는 입력된 정보를 전부 저장했지만, 계산을 수행할 때는 패키지 가격 중 가장 싼 가격, 낱개 가격 중 가장 싼 가격 2개만 있으면 된다.
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
void input_info(int* N, int* package_cheapest, int* ea_cheapest)
{
int M, i;
int package_price, ea_price;
int first_min = 1001, second_min = 1001;
cin >> *N >> M;
for (i = 0; i < M; i++)
{
cin >> package_price >> ea_price;
if (package_price < first_min)
{
first_min = package_price;
}
if (ea_price < second_min)
{
second_min = ea_price;
}
}
*package_cheapest = first_min;
*ea_cheapest = second_min;
return;
}
void find_answer(int N, int package_cheapest, int ea_cheapest)
{
int min_price, next;
int pack_count = (N / 6) + 1;
//한 패키지에 6개 들어있음
//한팩을 사고, 남는거는, 한팩을 통째로 사기 vs 낱개로 사기 비교...
//패키지 가격순으로 오름차순 비교
//한팩 가격이 제일 낮은거 기준으로 계산, 남는거가 한팩을 샀을때 더 싼지 낱개로 샀을때 더 싼지
//낱개 기준 가장 싼 경우도 확인
//벡터를 전부 저장할 필요 없이. first값이 가장 작은경우, second값이 가장 작은 경우만 있으면 됨.
//벡터 pair도 필요 없을듯
min_price = pack_count * package_cheapest;
while (pack_count > 0)
{
pack_count--;
next = pack_count * package_cheapest + (N - pack_count * 6) * ea_cheapest;
if (next < min_price)
{
min_price = next;
}
}
cout << min_price << "\n";
return;
}
int main(void)
{
ios_base::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
int package_cheapest, ea_cheapest;
int N;
input_info(&N, &package_cheapest, &ea_cheapest);
find_answer(N, package_cheapest, ea_cheapest);
return 0;
}