본문으로 바로가기
문제

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

 

16917번: 양념 반 후라이드 반

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

www.acmicpc.net

소스코드
#include <iostream>
#include <vector>
#include <queue>
#include <algorithm>
#include<memory.h>
#include <stdio.h>
using namespace std;
int a, b, c, x, y;
 
int main() {
	ios_base::sync_with_stdio(false), cin.tie(NULL);
	cin >> a >> b >> c >> x >> y;
	int price1 = 0, price2 = 0;
	price1 = a * x + b * y; // 반반치킨 안사고 그냥 계산했을 경우
	if (x == y) price2 = x * 2 * c; //반반치킨으로 가격해결
	else if (x > y) price2 = min(y * 2 * c + (x - y) * a, y * 2 * c + (x - y) * 2 * c); 
	// y만큼 반반으로 해결하고 남은x 구매하기 vs y만큼 반반으로 해결하고 남은x를 또 반반으로 해결하기
	else price2 = min(x * 2 * c + (y - x) * b, x * 2 * c + (y - x) * 2 * c);
	cout << min(price1, price2);
}
해설

10만번까지 다 계산해봐도 되고, 양념과 후라이드를 구매해야할 최소개수가 주어질때 경우의 수를 따져보면서 계산해봐도 된다.

저는 후자를 선택하였습니다.

우선 반반치킨을 사지않는 오리지날 가격을 price1에 저장합니다.

그리고 반반치킨을 구매할 수 있는 경우를 따져봅니다.

x와 y개수가 같으면, 그대로 반반치킨으로 치킨을 다 구매합니다.

x>y이면, y만큼 반반치킨을 구매하고 남은 x는 이제

case1) 그대로 x가격대로 개수를 맞춰서 살 것인가?

case2) 남은 x도 반반으로 해결할 것인가?

 

이런식으로 경우를 따져가면서 계산을 하여 최종적으로 결과 값을 비교하면됩니다.