메모리

시간

1116 KB

0 ms

Code

#include <cstdio>
#include <algorithm>
using namespace std;

int main(int argc, char const *argv[])
{
	int A,B,C,X,Y;
	scanf("%d%d%d%d%d", &A, &B, &C, &X, &Y);
	int result;
	int price;
	int max_ch;
	if ((A + B) > (C * 2))
	{
		result = (min(X,Y) * 2) * C;
		if (X == Y)
		{
			printf("%d", result);
			return 0;
		}
		else
		{
			max_ch = max(X,Y) - min(X,Y);
			price = X > Y ? A : B;
			if (price > C * 2)
			{
				max_ch = max_ch * 2 * C;
				result += max_ch;
			}
			else
				result += max_ch * price;
		}
	}
	else if (A > C * 2)
	{
		Y = X >= Y ? 0 : Y - X;
		result = (C * X * 2) + (B * Y);
	}
	else if (B > C * 2)
	{
		X = Y >= X ? 0 : X - Y;
		result = (C * Y * 2) + (A * X);
	}
	else
		result = (A * X) + (B * Y);
	printf("%d", result);
	return 0;
}

문제 풀이

처음에는 a+b의 합이 c* 2 일때만 반반을 사고 남는 걸 한마리씩 구매하면 된다 생각했으나

남는 치킨의 가격이 c*2 보다 크다면 반반 주문 후 치킨이 남더라도 반반으로 모두 구매하는게 더 적은 금액으로 구매할 수 있다.

아래처럼 경우를 나누어 단순계산 하였다.

  1. 반반 가격보다 X, Y 둘다 가격이 작을때
  2. X, Y 둘 중 하나가 반반보다 가격이 클때
  3. A + B 가 C보다 가격이 작고 더 마리수가 많은 종류의 가격이 반반 *2 보다 작을때
  4. A + B 가 C보다 가격이 작고 더 마리수가 많은 종류의 가격이 반반 *2 보다 클때