정보과학융합탐구

15. 자판기에서 가장 많이 먹을 수 있는 경우의 수

Quettabyte 2023. 7. 4. 14:20

학교에서 지나가다가 자판기를 보게 되었는데 자판기에서 한정된 돈으로 얼마나 많은 음료수를 먹을 수 있는 지 궁금해서 코드로 구현을 해보았습니다.

 

#include <stdio.h>
#include <string.h>

#define NUM_OF_PRODUCTS 3

// 상품 정보 구조체
typedef struct {
    char name[20];
    int price;
} Product;

// 상품 정보 배열 초기화
void initializeProducts(Product products[]) {
    // 각 상품의 이름과 가격을 설정
    strcpy(products[0].name, "콜라");
    products[0].price = 1000;
    strcpy(products[1].name, "사이다");
    products[1].price = 900;
    strcpy(products[2].name, "환타");
    products[2].price = 800;
}

// 최대로 구매할 수 있는 상품 구하기
void findMaxPurchase(Product products[], int money) {
    int maxCount = 0; // 최대 구매 수량
    int maxTotalPrice = 0; // 최대 구매 가격
    int maxCombination[NUM_OF_PRODUCTS] = {0}; // 최대 구매 조합

    int quantity[NUM_OF_PRODUCTS] = {0}; // 각 상품 수량
    int totalPrice = 0; // 현재 구매 가격
    int currentIndex = 0; // 현재 상품 인덱스

    while (1) {
        if (totalPrice + products[currentIndex].price <= money) {
            // 상품을 추가로 구매할 수 있는 경우
            quantity[currentIndex]++;
            totalPrice += products[currentIndex].price;
            if (totalPrice > maxTotalPrice) {
                // 최대 구매 가격 및 조합 갱신
                maxTotalPrice = totalPrice;
                memcpy(maxCombination, quantity, sizeof(quantity));
            }
        } else {
            // 다음 상품으로 이동
            currentIndex++;
            if (currentIndex >= NUM_OF_PRODUCTS) {
                // 마지막 상품까지 검사한 경우 반복문 종료
                break;
            }
        }
    }

    // 결과 출력
    printf("최대 구매 가능한 상품 수량:\n");
    for (int i = 0; i < NUM_OF_PRODUCTS; i++) {
        printf("%s: %d개\n", products[i].name, maxCombination[i]);
    }
    printf("최대 구매 가격: %d원\n", maxTotalPrice);
}

int main() {
    Product products[NUM_OF_PRODUCTS];
    initializeProducts(products);

    int money;
    printf("사용 가능한 금액을 입력하세요: ");
    scanf("%d", &money);

    findMaxPurchase(products, money);

}

다음 코드를 이용하여 한정된 돈을 가지고 있을때 가장 최선의 선택을 하길 바랍니다!