https://www.acmicpc.net/problem/1661

 

1661번: 다솜이의 신발가게

첫째 줄에 유행에 떨어진 제품의 개수 N과 영식이가 사고 싶어 하는 제품 P의 가격이 들어온다. N은 50보다 작거나 같은 자연수이다. P는 1,000,000,000보다 작거나 같은 자연수이다. 둘째 줄부터 총 N

www.acmicpc.net

 

풀이 

더보기

0. 핵심 아이디어

같은 할인률이면 물건의 가격이 낮은것을 사는것이 이득입니다.

그렇기에 물건들을 할인률 별로 묶고 오름차순으로 관리할 수 있습니다.

 

N이 최대 50밖에 안되기 때문에

(1퍼센트 사용) / (2퍼센트 사용) / (3퍼센트 사용) 갯수를 정해두고 브루트포스로 탐색해서

가장 낮은 가격이 되는 값을 구하면됩니다.

 

자세한것은 코드를 참고해주세요.

코드

더보기

 

#include <bits/stdc++.h>

#pragma warning(disable:4996)

using namespace std;

#define endl "\n"
#define int long long
#define float long double

const int INF = 999999999999999;
const int Dic[4][2] = { {0,1},{0,-1},{1,0},{-1,0} };

////////////////////////////////////////////////////////////////////////

int N, P;
vector<int> items[4];
float ans = 0;
float Get(int a, int b, int c) //(1퍼센트 사용) / (2퍼센트 사용) / (3퍼센트 사용)
{
	if (items[1].size() < a)
		return P;
	if (items[2].size() < b)
		return P;
	if (items[3].size() < c)
		return P;

	float now = P;
	float sum = 0;
	for (int i = 0; i < a; i++)
	{
		now = now * 0.99f;
		sum += (float)items[1][i];
	}
	for (int i = 0; i < b; i++)
	{
		now = now * 0.98f;
		sum += (float)items[2][i];
	}
	for (int i = 0; i < c; i++)
	{
		now = now * 0.97f;
		sum += (float)items[3][i];
	}

	return now + sum;
}
int32_t main()
{
	ios_base::sync_with_stdio(false);
	std::cin.tie(NULL);
	std::cout.tie(NULL);

	//소수점 자리수 설정
	cout << fixed;
	cout.precision(12);

	std::cin >> N >> P;
	for (int i = 0; i < N; i++)
	{
		int a, b;
		std::cin >> a >> b;
		//할인률별로 모아준다
		items[b].push_back(a);
	}
	for (int i = 1; i <= 3; i++)
	{
		//할인률별로 묶인것을 정렬
		sort(items[i].begin(), items[i].end());
	}

	ans = P;
	for (int i = 0; i <= N; i++)
		for (int j = 0; i + j <= N; j++)
			for (int k = 0; i + j + k <= N; k++)
			{
				//(1퍼센트 사용) / (2퍼센트 사용) / (3퍼센트 사용) 갯수를 정해놓고 적용해본다.
				ans = min(ans, Get(i, j, k));
			}

	std::cout << ans << endl;

}

 

'알고리즘 > 문제풀이' 카테고리의 다른 글

백준 11900 차이 그래프  (0) 2022.06.27
백준 1006 습격자 초라기  (0) 2022.04.09
백준 16359 Disks Arrangement  (0) 2021.12.01
백준 17274 카드 공장 (Large)  (0) 2021.09.18
백준 22957 짝수싫어수  (1) 2021.08.29

+ Recent posts