15720

#include <stdio.h>
#include <stdlib.h>
#include <stdarg.h>

// 내림차순
int compare(const void* a, const void* b) {
    return (*(int*)b - *(int*)a);
}

// 가격 입력하고 가격 배열 리턴
int* input_price(int size){
    int *price_arr = (int *)malloc(sizeof(int)*size);

    for(int i = 0; i < size; i++){
        scanf("%d", &price_arr[i]);
    }

    return price_arr;
}

// min 구하기 feat.가변 인자 함수
int min_f (int num, ...){
    va_list args;
    va_start(args, num);

    int min = va_arg(args, int);
    for(int i = 1; i < num; i++){
        int value = va_arg(args, int);
        if(min > value){
            min = value;
        }
    }
    va_end(args);

    return min;
}

// 합 구하는 함수
int sum(int start, int end, int *arr){
    int sum = 0;

    for(int i = start; i < end; i++){
        sum += arr[i];
    }

    return sum;
}

int main(void){
    // 버거의 개수 B, 사이드 메뉴의 개수 C, 음료의 개수 D 입력
    int burger_num = 0, side_num = 0, drink_num = 0;
    scanf("%d %d %d", &burger_num, &side_num, &drink_num);

    // 가격 배열에 저장
    int *burger_price = input_price(burger_num);
    int *side_price = input_price(side_num);
    int *drink_price = input_price(drink_num);
    
    // 내림차순 퀵 정렬
    qsort(burger_price, burger_num, sizeof(int), compare);
    qsort(side_price, side_num, sizeof(int), compare);
    qsort(drink_price, drink_num, sizeof(int), compare);
    
    int discount_sum = 0;       // 할인 할 금액 합
    int non_discount_sum = 0;   // 할인 안 할 금액 합

    int min = min_f(3, burger_num, side_num, drink_num);
    // 세트 가격 합 계산하기 (할인 할 금액 합)
    for(int i = 0; i < min; i++){
        discount_sum += burger_price[i] + side_price[i] + drink_price[i];
    }

    // 세트 아닌 메뉴 가격 합 합하기
    non_discount_sum = sum(min, burger_num, burger_price) +
                        sum(min, side_num, side_price) +
                        sum(min, drink_num, drink_price);

    // 세트 할인 적용되기 전 가격 출력 
    printf("%d\n", discount_sum+non_discount_sum);
    // 세트 할인이 적용된 후의 최소 가격
    printf("%d\n", (discount_sum*9/10)+non_discount_sum);
    
    free(burger_price);
    free(side_price);
    free(drink_price);
    return 0;
}

+ Recent posts