알고리즘

백준 15720번 카우버거 (JAVA)

박카스마시며코딩 2023. 10. 1. 20:27

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

 

15720번: 카우버거

첫째 줄에는 주문한 버거의 개수 B, 사이드 메뉴의 개수 C, 음료의 개수 D가 공백을 사이에 두고 순서대로 주어진다. (1 ≤ B, C, D ≤ 1,000) 둘째 줄에는 각 버거의 가격이 공백을 사이에 두고 주어진

www.acmicpc.net

 

저는 정렬을 통해 문제를 해결하였습니다.

먼저 버거 사이드 음료를 정렬하고 각각의 개수의 최소값을 구합니다.

각각 그만큼만 10퍼센트 세일해 문제를 해결하였습니다.

 

package BOJ.etc;

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.StringTokenizer;
import java.util.function.Function;

public class BOJ_15720 {

    public static void main(String[] args) throws Exception {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        Function<String,Integer> stoi = Integer::parseInt;
        StringTokenizer st = new StringTokenizer(br.readLine());
        int buggerCnt = stoi.apply(st.nextToken());
        int sideCnt = stoi.apply(st.nextToken());
        int drinkCnt = stoi.apply(st.nextToken());
        int[] bugger = new int[buggerCnt];
        int[] side = new int[sideCnt];
        int[] drink = new int[drinkCnt];
        st = new StringTokenizer(br.readLine());
        for(int i = 0 ; i < buggerCnt ; i++){
            bugger[i] = stoi.apply(st.nextToken());

        }
        Arrays.sort(bugger);
        st = new StringTokenizer(br.readLine());
        for(int i = 0 ; i < sideCnt ; i++){
            side[i] = stoi.apply(st.nextToken());
        }
        st = new StringTokenizer(br.readLine());
        for(int i = 0 ; i < drinkCnt ; i++){
            drink[i] = stoi.apply(st.nextToken());
        }
        Arrays.sort(bugger);
        Arrays.sort(side);
        Arrays.sort(drink);
        int[] result = cal(bugger,side,drink,buggerCnt,sideCnt,drinkCnt);
        System.out.println(result[0]);
        System.out.println(result[1]);
    }

    private static int[] cal(int[] bugger, int[] side, int[] drink, int buggerCnt, int sideCnt, int drinkCnt) {
        int min = Math.min(buggerCnt,sideCnt);
        min = Math.min(min,drinkCnt);
        int sum = 0;
        int saleSum = 0;
        for(int i = buggerCnt-1 ; i >= 0 ; i--){
            sum += bugger[i];
            if(i >= buggerCnt - min){
                saleSum += bugger[i] * 0.9;
            }else{
                saleSum += bugger[i];
            }
        }
        for(int i = sideCnt-1 ; i >= 0 ; i--){
            sum += side[i];
            if(i >= sideCnt - min){
                saleSum += side[i] * 0.9;
            }else{
                saleSum += side[i];
            }
        }
        for(int i = drinkCnt-1 ; i >= 0 ; i--){
            sum += drink[i];
            if(i >= drinkCnt - min){
                saleSum += drink[i] * 0.9;
            }else{
                saleSum += drink[i];
            }
        }
        return new int[]{sum,saleSum};
    }
}