윤개발

백준 16917 양념반 후라이드반 java 본문

알고리즘

백준 16917 양념반 후라이드반 java

DEV_SJ 2020. 6. 7. 00:53

문제

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

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

입력

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

출력

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

제한

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

코드

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class P16917_양념반_후라이드반 {
    public static int stringToInt(String s) {
        return Integer.parseInt(s);
    }

    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        String input[] = br.readLine().split(" ");

        int A, B, C, X, Y;
        A = stringToInt(input[0]);
        B = stringToInt(input[1]);
        C = stringToInt(input[2]);

        X = stringToInt(input[3]);
        Y = stringToInt(input[4]);

        int count = 0;

        if ((A + B) <= C * 2) {//case 1
            count += (A * X) + (B * Y);
        } else {//case 2
            if (X > Y) {//case 2-1
                count += Y * (C * 2);
                count += Math.min((X - Y) * A, (X - Y) * (C * 2));
            } else {//case 2-2
                count += X * (C * 2);
                count += Math.min((Y - X) * B, (Y - X) * (C * 2));
            }

        }
        System.out.println(count);
    }
}

해설

/*
* input : A B C X Y
* 후라이드 가격 : A 구매 개수 : X
* 양념 가격 : B 구매 개수 : Y
* 반반 가격 : C
*
* 후라이드1+양념1 과 반반*2 중 무엇이 더 싼가
* case 1. 전자 일 경우
* (A * X) + (B * Y)
*
* case 2. 후자 일 경우
* 반반으로 최대한 많은 개수를 확보 -> X, Y 중에 더 적은것을 반반으로 최대한 산다.
*
* X 가 크다면 Y * (C * 2) 그러면 X-Y 개수의 후라이드(A)를 더 사야한다.
* case 2-1.
* (X-Y)*A (X-Y)*(C*2) 중 작은 값을 더해준다< = 양념을 더 사더라도 반반이 싸다면 최소비용이 적어지기 때문
* Y 가 크다면 X * (C * 2) 그러면 Y-X 개수의 양념(B)를 더 사야한다.
* case 2-2.
* (Y-X)*B (Y-X)*(C*2) 중 작은 값을 더해준다.
*
*/

'알고리즘' 카테고리의 다른 글

백준 2573 빙산 python  (0) 2020.11.22
백준 11053번 가장 긴 증가하는 부분 수열  (0) 2020.11.15
백준 2665 미로만들기  (0) 2020.02.29
백준 10819 차이를 최대로  (0) 2020.02.29
백준 5582번 공통 부분 문자열  (0) 2020.02.25
Comments