celina의 이것저것

[C++] 백준 16917번 - 양념 반 후라이드 반 본문

자료구조&알고리즘/백준

[C++] 백준 16917번 - 양념 반 후라이드 반

celinayk 2023. 2. 10. 21:04
반응형

문제

현진 치킨에서 판매하는 치킨은 양념 치킨, 후라이드 치킨, 반반 치킨으로 총 세 종류이다. 반반 치킨은 절반은 양념 치킨, 절반은 후라이드 치킨으로 이루어져있다. 양념 치킨 한 마리의 가격은 A원, 후라이드 치킨 한 마리의 가격은 B원, 반반 치킨 한 마리의 가격은 C원이다.
상도는 오늘 파티를 위해 양념 치킨 최소 X마리, 후라이드 치킨 최소 Y마리를 구매하려고 한다. 반반 치킨을 두 마리 구입해 양념 치킨 하나와 후라이드 치킨 하나를 만드는 방법도 가능하다. 상도가 치킨을 구매하는 금액의 최솟값을 구해보자.

입력

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

출력

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

접근

 

코드

#define _CRT_SECURE_NO_WARNINGS
#include <iostream> 
#include <algorithm>
#include <string>
#include <vector>
using namespace std;

int main() {
    
    int a, b, c, x, y;
    scanf("%d %d %d %d %d", &a, &b, &c, &x, &y);

    if (a + b < 2 * c)
        printf("%d", a * x + b * y);
    else
        printf("%d", min(x, y) * 2 * c + min(a, 2 * c) * max(0, x - y) + min(b, 2 * c) * max(0, y - x));


    return 0;
}

리뷰

가장 크게 나눌수 있는건 반반치킨을 쓰느냐 아니면 통양념,통후라이드로 사냐 이것이다

a+b와 2*c의 값을 비교해서 그냥 양념치킨과 후라이드로 구매하는것이 쌀경우를 작성한다(이건 쉬움)

 

그다음은 반반치킨을 이용하는 경우다

1. 먼저 반반치킨을 구매한다

min(x, y) * 2 * c
//양념,후라이드를 비교해서 적은 숫자의 2배를 한것이 구매해야할 반반치킨의 갯수이다 곱하기 치킨가격

2. 반반치킨을 구매하면 남는 치킨이 있을것이다(후라이드or 양념)

2-1  만약 후라이드 치킨이 남을 경우 또 나뉜다

 통후라이드를 구매하거나 or 반반치킨을 구매하거나(최소금액이라서 반반이 싸면 반반짜리 두개사고 양념을 버리면됨)

 

2-2 만약 양념치킨이 남을경우

통양념을 구매하거나 or 반반치킨을 구매하거나

 

2번에서 남는 치킨이 후라이드인지 양념인지 if문으로 경우를 나눠야 하나 생각해서 조금 시간이 걸렸다 ㅜ

그냥 둘다 더하기로 했다 왜냐면 한쪽은 0이 될거라서 가격에 영향을 미치지 않기 때문이다

(왜 한쪽이 0이되냐? >>> 남는건 후라이드거나 양념이거나 둘중에 하나니까 하나는 안남는다 무조건)

 min(a, 2 * c) * max(0, x - y)
 //양념치킨이 남는경우이다(max함수)
 //min함수를 통해 양념치킨을 통양념(a)로 구매할지 반반치킨두개를 구매할지 적은가격을 고른다
 
 + min(b, 2 * c) * max(0, y - x));
 //후라이드치킨이 남는경우
 //min함수를 통해 통구매 or 반반치킨 두개 가격이 싼걸 고른다

 

출처

16917번: 양념 반 후라이드 반 (acmicpc.net)

 

16917번: 양념 반 후라이드 반

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

www.acmicpc.net

 

Comments