본문 바로가기

백준/C++

[Baekjoon/C++] 16917번 - 양념 반 후라이드 반

[백준] Baekjoon Online Judge

문제로 이동

 

문제

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

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

 

입력

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

 

출력

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

 

제한

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

 


풀이

#include <iostream>
using namespace std;

int main() {
    ios::sync_with_stdio(false);
    cin.tie(0);
    cout.tie(0);

    int A, B, C, X, Y;
    cin >> A >> B >> C >> X >> Y;

    int result = 0;
    
    // 반반으로 구매하는 것이 더 저렴할 때
    if (C * 2 < A + B) {
        int cnt = min(X, Y);

        result += (cnt * C * 2);
        X -= cnt;
        Y -= cnt;
    }
    
    int sum1 = (A * X + B * Y);		// 남은 치킨 딱맞게 구매
    int sum2 = C * 2 * max(X, Y);	// 남은 치킨 초과해서 반반으로 구매

    result += min(sum1, sum2);

    cout << result << '\n';
}

먼저 치킨을 반반으로 구매한 것이 양념 하나와 후라이드 하나를 주문했을 때보다 저렴하다면 필요량을 초과해서 구매하지 않는 선에서 반반 치킨을 주문하도록 했다. 그리고 남은 치킨을 딱맞게 양념 + 후라이드로 구매할 때와 초과해서 반반으로 구매할 때의 가격을 계산했다. 그리고 이 값을 비교해서 더 작은 것을 result에 더하고, 이를 출력하도록 했다.