문제 링크: https://www.acmicpc.net/problem/1049

 

제일 싼 6개 패키지와 낱개의 가격을 저장합니다. 브랜드는 두개가 달라도 상관없습니다.

그 다음 낱개*6개가 6개 패키지보다 싸면 낱개로 전부 사면 되니까 N*낱개 가격을 출력합니다.

6개 패키지가 더 싸다면 끊어진 줄이 6의 배수가 아닐 경우를 생각해봅시다

  • 1) 줄이 남을 때까지 6개 패키지를 구매
  • 2) 줄이 6개 미만이 될 때까지 6개 패키지를 구매하고, 나머지는 낱개로 사기

뭐가 더 싸게 먹힐지 모르니 두 경우 모두 계산해서 min값을 출력하면 됩니다

#include <bits/stdc++.h>
using namespace std;

const int INF = 987654321;

int main()
{
	ios_base::sync_with_stdio(false);
	cin.tie(nullptr), cout.tie(nullptr);

	int n, m;
	cin >> n >> m;

	int min_sixpack = INF, min_single = INF;

	while (m--) {
		int a, b;
		cin >> a >> b;

		min_sixpack = min(min_sixpack, a);
		min_single = min(min_single, b);
	}

	if (min_single * 6 <= min_sixpack) {
		cout << min_single * n << '\n';
	}
	else {
		int mn = min(
			(n/6)*min_sixpack + (n%6)*min_single,
			((n/6)+1)*min_sixpack
		);

		cout << mn << '\n';
	}

	return 0;
}
반응형

'Online Judge > 백준' 카테고리의 다른 글

[백준][C++] 18249: 욱제가 풀어야 하는 문제  (0) 2020.08.10
[백준][C++] 10610: 30  (0) 2020.08.09
[백준][C++] 5462: POI  (0) 2020.08.07
[백준][C++] 5463: 건포도  (0) 2020.08.06
[백준][C++] 11051: 이항 계수 2  (0) 2020.08.05