정보과학융합탐구
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);
}
다음 코드를 이용하여 한정된 돈을 가지고 있을때 가장 최선의 선택을 하길 바랍니다!