본문 바로가기
CODING

COS Pro 1급 C언어 모의고사 - 피자

by snow_white 2023. 11. 28.

문제 설명
피자별 크기와 가격이 주어질 때, 가장 큰 피자의 크기와 가장 싼 피자의 가격을 찾으려 합니다(단, 크기가 같은 피자나 가격이 같은 피자는 없다고 가정합니다). 이를 위해 다음과 같이 구조체를 정의했습니다.

typedef struct Pizza {
    int size;
    int price;
}Pizza;


또한 다음과 같이 프로그램 구조를 작성했습니다.

1. 피자의 크기와 가격으로 구성된 구조체 배열을 생성 및 초기화합니다.
2. 생성한 구조체 배열을 크기의 내림차순으로 정렬합니다.
3. 정렬한 구조체 배열에서 1번째에 있는 피자의 크기를 answer 배열의 첫번째 원소에 담습니다.
4. 구조체 배열을 가격의 오름차순으로 정렬합니다.
5. 정렬한 구조체 배열에서 1번째에 있는 피자의 크기를 answer 배열의 두번째 원소에 담습니다.


피자별 크기를 담은 배열 size와 size의 길이 size_len, 피자별 가격을 담은 배열 price와 price의 길이 price_len이 매개변수로 주어질 때, 가장 큰 피자의 크기와 가장 싼 피자의 가격을 배열에 담아 return 하도록solution 함수를 작성하려 합니다. 위 구조를 참고하여 코드가 올바르게 동작할 수 있도록 빈칸을 채워 전체 코드를 완성해주세요.

매개변수 설명
피자별 크기를 담은 배열 size와 size의 길이 size_len, 피자별 가격을 담은 배열 price와 price의 길이 price_len가 solution 함수의 매개변수로 주어집니다.

size_len과 price_len은 항상 같으며 3 이상 100 이하인 자연수입니다.
피자 크기는 1 이상 100 이하인 자연수입니다.
피자 가격은 1 이상 100 이하인 자연수입니다.
피자들의 크기와 가격은 서로 다릅니다.
return 값 설명
가장 큰 피자의 크기와 가장 싼 피자의 가격을 배열에 담아 return 합니다.


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

typedef struct Pizza {
    int size;
    int price;
}Pizza;

int compare_a(const void *a, const void *b) {
    Pizza first = *(Pizza *)a;
    Pizza second = *(Pizza *)b;
    if(first.size > second.size)
        return -1;
    else if(first.size < second.size)
        return 1;
    else
        return 0;
}

int compare_b(const void *a, const void *b) {
    Pizza first = *(Pizza *)a;
    Pizza second = *(Pizza *)b;
    if(first.price < second.price)
        return -1;
    else if(first.price > second.price)
        return 1;
    else
        return 0;
}

int* solution(int size[], int size_len, int price[], int price_len) {
    int* answer = (int *)malloc(sizeof(int) * 2);

    int len = size_len;
    Pizza* pizzas = (Pizza *)malloc(sizeof(Pizza) * len);

    for(int i = 0; i < len; i++) {
        pizzas[i].size = size[i];
        pizzas[i].price = price[i];
    }

    qsort(pizzas, len, sizeof(Pizza), compare_a);
    answer[0] = pizzas[0].size;

    qsort(pizzas, len, sizeof(Pizza), compare_b);
    answer[1] = pizzas[0].price;

    return answer;
}

int main() {
    int size[] = {10, 20, 30, 40};
    int size_len = 4;
    int price[] = {3, 1, 5, 4};
    int price_len = 4;
    int* ret = solution(size, size_len, price, price_len);

    printf("solution 함수의 반환 값은 {%d, %d} 입니다.\n", ret[0], ret[1]);
}

댓글