본문 바로가기

PS/BaekJoon

[백준/c++] 16917 양념 반 후라이드 반

문제

현진 치킨에서 판매하는 치킨은 양념 치킨, 후라이드 치킨, 반반 치킨으로 총 세 종류이다. 반반 치킨은 절반은 양념 치킨, 절반은 후라이드 치킨으로 이루어져있다. 양념 치킨 한 마리의 가격은 A원, 후라이드 치킨 한 마리의 가격은 B원, 반반 치킨 한 마리의 가격은 C원이다.

상도는 오늘 파티를 위해 양념 치킨 최소 X마리, 후라이드 치킨 최소 Y마리를 구매하려고 한다. 반반 치킨을 두 마리 구입해 양념 치킨 하나와 후라이드 치킨 하나를 만드는 방법도 가능하다. 상도가 치킨을 구매하는 금액의 최솟값을 구해보자.

입력

첫째 줄에 다섯 정수 A, B, C, X, Y가 주어진다.

출력

양념 치킨 최소 X마리, 후라이드 치킨 최소 Y마리를 구매하는 비용의 최솟값을 출력한다.

제한

  • 1 ≤ A, B, C ≤ 5,000
  • 1 ≤ X, Y ≤ 100,000

구현해야할 조건

자! 최소 X마리 최소 Y마리를 주목하면 됩니다! 저는 최소라는 단어를 못읽고 정확히 정해준 치킨을 사는 것으로 착각을 해서 문제를 좀 헤맸습니다. 치킨은 많으면 많을수록 다다익선이니까 더 사도 돼! 가격이 싸다면!

code

#include<iostream>
#include<cmath>
#include<algorithm>

using namespace std;

int A,B,C,X,Y;

int main()
{
	// A : 양념, B : 후라이드, C : 반반, X : 양념, Y : 후라이드 
	
	cin >> A >> B >> C >> X >> Y;
	
	int chichi = (A*X) + (B*Y);
	int halfchi = 0;
	
	//최소 X마리 최소 Y마리에 주목! 
	
	if(X == Y)
	{
		halfchi = X * 2 * C;
	} 
	else if(X > Y) // 양념이 더 많을때 
	{
		halfchi = min(Y * 2 * C + (X-Y) * A, Y * 2 * C + (X-Y) * 2 * C);
	}
	else if(Y > X) // 후라이드가 더 많을 때 
	{
		halfchi = min(X * 2 * C + (Y-X) * B, X * 2 * C + (Y - X) * 2 * C);
	}
	
	int res = min(halfchi, chichi);
	
	cout << res;
	
	
	return 0;
}