백준 1049 c++

magicdrill·2024년 2월 29일
0

백준 문제풀이

목록 보기
60/654

백준 1049 c++

처음에는 입력된 정보를 전부 저장했지만, 계산을 수행할 때는 패키지 가격 중 가장 싼 가격, 낱개 가격 중 가장 싼 가격 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;
}

0개의 댓글