ascode 1224 산학협력관 자판기
문제 설명
동의대학교 수덕전에는 음료 자판기가 있다. 이 자판기는 구식이어서 여러 개의 음료를 구매하기 위해서는 매우 번거롭다. 왜냐하면 돈 넣고 하나 뽑고, 또 돈 넣고 하나 뽑고,… 이런 식으로 여러 개를 구매해야 하기 때문이다. 그래서 도훈이는 새로운 자판기 프로그램을 만들어서 좀 더 편리한 자판기가 되도록 해보고 싶다.
새로운 자판기 프로그램은 사고 싶은 음료의 종류 버튼을 누른 후 다시 원하는 개수만큼의 숫자를 입력하고 확인을 누르고, 또 다른 음료의 종류 버튼을 누른 후 다시 원하는 개수만큼의 숫자를 입력하고 확인을 누르고,… 이런 식으로 반복한 후 마지막에 완료 버튼을 누르면 총 가격을 알려주고 그 가격만큼의 돈을 투입하면 음료수가 모두 나오는 구조이다.
자판기 완료 버튼을 눌렀을 때 선택한 음료수들의 총 가격을 알려주고, 최소 금액의 거스름돈을 받기 위한 투입 금액, 거스름돈 액수, 그리고 거스름돈 동전 개수가 최소가 되도록 하는 동전별 갯수를 출력하는 프로그램을 작성하시오. 사용 가능한 지폐는 10,000원권, 5,000원권, 1,000원권의 3가지 종류이고 거스름돈은 500원, 100원의 2가지 동전으로만 나오는 것으로 가정한다.
입력 설명
첫 줄에 테스트케이스의 수가 들어온다.
그 다음 줄에 음료수의 종류(n_menu)가 입력된다. ( 1 <= n_menu <= 10)
그 다음 줄부터 음료의 종류와 가격(price)이 n_menu 줄 입력된다. ( 500 <= price <= 5,000) 모든 음료의 가격은 100의 배수이다.
그 다음 줄에 구매하고자 하는 음료 종류의 개수(drink_num)가 입력된다. 1 <= drink_num <= n_menu <= 10)
다음 줄부터 선택한 음료의 종류와 구매하고자 하는 개수(buy_num)가 drink_num 줄 입력된다.(1 <= buy_num <= 5)
* 음료수의 이름은 중복되지 않으며, 이름의 최대 길이는 영어 15자이다.
출력 설명
테스트케이스 별로 선택한 음료수들의 총 금액, 최소 투입 금액, 최소 투입 금액을 위한 최소의 지폐 갯수, 거스름돈 액수, 거스름돈 동전 갯수가 최소가 되도록 하는 동전 종류별 갯수를 한 줄씩 출력한다. 각 값들 사이에는 공백을 하나만 둔다.(자세한 출력 형식은 출력 예시를 참고하시오)
입력 예시
1
3
CanCoffee 600
CanCoke 500
CanOranC 700
2
CanCoffee 3
CanOranC 5
출력 예시
Total:5300 Money:6000 Bill:2 Change:700(500:1 100:2)
코드1
#include <string.h>
#include <ctype.h>
struct nomimono {
char juice[21];
int price;
};
int main() {
int test, kind, buy, a = 0, b = 0,price;
struct nomimono nomu[10];
char menu[21];
int money[3] = { 10000,5000,1000 };
scanf("%d", &test);
for (int i = 0; i < test; i++) {
int result[5] = { 0, };
int num[5] = { 0, };
scanf("%d", &kind);;
for (int j = 0; j < kind; j++) {
scanf("%s %d", nomu[j].juice, &nomu[j].price);
}
scanf("%d", &buy);
for (int j = 0; j < buy; j++) {
scanf("%s %d", menu, &price);
for (int k = 0; k < kind; k++) {
if (strcmp(menu, nomu[k].juice) == 0) {
result[0] = result[0] +( nomu[k].price*price);
}
}
}
if (result[0] % 1000 == 0) {
result[1] = result[0];
a = result[1];
}
else {
result[1] = result[0] / 1000 * 1000 + 1000;
a = result[1];
}
for (int j = 0; j < 3; j++) {
result[2] = result[2] + (a / money[j]);
a = a - (money[j] * (a / money[j]));
}
result[3] = result[1] - result[0];
b = result[3];
num[0] = b / 500;
num[1] = (b - 500 * num[0]) / 100;
printf("Total:%d Money:%d Bill:%d Change:%d(500:%d 100:%d)\n", result[0], result[1], result[2], result[3], num[0], num[1]);
}
return 0;
}
나 : say
몰?루
댓글남기기