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

金弘均·2021년 9월 16일
0

Baekjoon Online Judge

목록 보기
148/228
post-thumbnail
post-custom-banner

# Appreciation

/*
 * Problem :: 16917 / 양념 반 후라이드 반
 *
 * Kind :: Math
 *
 * Insight
 * - 어떻게 하면 더 싸게 먹을 수 있을까?
 *   + (양념 치킨 한 마리 가격 + 후라이드 치킨 한 마리 가격) ? 반반 치킨 두 마리 가격
 *     ? 가 > 라면, 반반 치킨 두 마리 시키는 게 이득이다
 *     ? 가 < 라면, 양념 한 마리, 후라이드 한 마리 각각 시키는 게 이득이다
 *     # 양념 치킨만 추가로 시켜야 하는 경우
 *       양념 치킨 한 마리 가격 ? 반반 치킨 두 마리 가격
 *       ? 가 > 라면, 양념 치킨 한 마리 시키는 게 이득이다
 *       ? 가 < 라면, 반반 치킨 두 마리 시키는 게 이득이다
 *     # 후라이드 치킨만 추가로 시켜야 하는 경우
 *       후라이드 치킨 한 마리 가격 ? 반반 치킨 두 마리 가격
 *       ? 가 > 라면, 후라이드 치킨 한 마리 시키는 게 이득이다
 *       ? 가 < 라면, 반반 치킨 두 마리 시키는 게 이득이다
 *
 * Point
 * - 현실은 절대 그럴리가 없지만,
 *   반반 치킨이 엄청나게 싼 경우를 고려해야 한다
 *   + A=5000, B=5000, C=1 이고 X=100, Y=200 이라하면
 *     그냥 반반 치킨으로 다 시키는 게 이득이다
 *     
 * - 100,000 * 5,000 = 5*10^8
 *   Overflow 위험이 있어서 int 대신 long 을 사용하였다
 *
 * - 치킨 먹고 싶다...
 */

# Code

//
//  BOJ
//  ver.C++
//
//  Created by GGlifer
//
//  Open Source

#include <iostream>

using namespace std;

#define endl '\n'

// Set up : Global Variables
/* None */

// Set up : Functions Declaration
/* None */


int main()
{
    // Set up : I/O
    ios::sync_with_stdio(false);
    cin.tie(nullptr);

    // Set up : Input
    long A, B, C, X, Y;
    cin >> A >> B >> C >> X >> Y;

    // Process
    long ans = 0; /* 구매하는 비용의 최솟값 */
    /* 양념 한 마리, 후라이드 한 마리 각각 구매하는 것보다 반반 두 마리 구매하는 것이 싸다면 */
    if (2*C <= A+B) {
        long Z = min(X, Y); /* 반반 으로 같이 구매해야 하는 치킨의 수 */
        ans += Z * 2*C; /* Z 마리를 반반 으로 구매 */
        X -= Z; /* Z 마리 구매 후, 구매해야 하는 남은 양념 치킨의 수 */
        Y -= Z; /* Z 마리 구매 후, 구매해야 하는 남은 후라이드 치킨의 수 */
        /* X, Y 둘 중 하나는 0이 됨 */
        if (X > 0) { /* 남은 양념 치킨 구매 */
            /* 양념 한 마리 사는 것보다 반반 두 마리 구매하는 것이 싸다면 반반 으로 구매
             * 그렇지 않다면, 양념 으로 구매 */
            ans += (2*C <= A) ? X * 2*C : X * A;
        }
        if (Y > 0) { /* 남은 후라이드 치킨 구매 */
            /* 후라이드 한 마리 사는 것보다 반반 두 마리 구매하는 것이 싸다면 반반 으로 구매
             * 그렇지 않다면, 후라이드 로 구매 */
            ans += (2*C <= B) ? Y * 2*C : Y * B;
        }
    }
    /* 양념 한 마리, 후라이드 한 마리 각각 구매하는 것보다 반반 두 마리 구매하는 것이 비싸다면 */
    else {
        /* 반반 안삼, 후라이드와 양념 각각 구매 */
        ans += X * A;
        ans += Y * B;
    }

    // Control : Output
    cout << ans << endl;
}

// Helper Functions
/* None */
profile
이런 미친 게임을 봤나! - 옥냥이
post-custom-banner

0개의 댓글