package Ex5;
public class Ex5_7 {
// [5-7] 문제 5-6에 동전의 개수를 추가한 프로그램이다. 커맨드라인으로부터 거슬러 줄
// 금액을 입력받아 계산한다. 보유한 동전의 개수로 거스름돈을 지불할 수 없으면, ‘거스름
// 돈이 부족합니다.’라고 출력하고 종료한다. 지불할 돈이 충분히 있으면, 거스름돈을 지불
// 한 만큼 가진 돈에서 빼고 남은 동전의 개수를 화면에 출력한다. (1)에 알맞은 코드를
// 어서 프로그램을 완성하시오.
// [연습문제]/ch5/Exercise5_7.java
// class Exercise5_7
// {
// public static void main(String args[])
// {
// if(args.length!=1) {
// System.out.println("USAGE: java Exercise5_7 3120");
// System.exit(0);
// }
// // 문자열을 숫자로 변환한다. 입력한 값이 숫자가 아닐 경우 예외가 발생한다.
// int money = Integer.parseInt(args[0]);
// System.out.println("money="+money);
// int[] coinUnit = {500, 100, 50, 10 }; // 동전의 단위
// int[] coin = {5, 5, 5, 5}; // 단위별 동전의 개수
// for(int i=0;i<coinUnit.length;i++) {
// int coinNum = 0;
// /* (1) 아래의 로직에 맞게 코드를 작성하시오.
// 1. 금액(money)을 동전단위로 나눠서 필요한 동전의 개수(coinNum)를 구한다.
// 2. 배열 coin에서 coinNum만큼의 동전을 뺀다.
// (만일 충분한 동전이 없다면 배열 coin에 있는 만큼만 뺀다.)
// 3. 금액에서 동전의 개수(coinNum)와 동전단위를 곱한 값을 뺀다.
// */
// System.out.println(coinUnit[i]+"원: "+coinNum);
// }
// if(money > 0) {
// System.out.println("거스름돈이 부족합니다.");
// System.exit(0); // 프로그램을 종료한다.
// }
// System.out.println(" 남은 동전의 개수 =");
// for(int i=0;i<coinUnit.length;i++) {
// System.out.println(coinUnit[i]+"원:"+coin[i]);
// }
// } // main
// }
// [참고] 실행결과는 다음 페이지에 있다.
//
// [실행결과]
// C:\jdk1.5\work\ch5>java Exercise5_7
// USAGE: java Exercise5_7 3120
// C:\jdk1.5\work\ch5>java Exercise5_7 3170
// money=3170
// 500원: 5
// 100원: 5
// 50원: 3
// 10원: 2
// 남은 동전의 개수
// 500원:0
// 100원:0
// 50원:2
// 10원:3
// C:\jdk1.5\work\ch5>java Exercise5_7 3510
// money=3510
// 500원: 5
// 100원: 5
// 50원: 5
// 10원: 5
// 거스름돈이 부족합니다.
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
if (args.length != 1) {
System.out.println("USAGE: java Exercise5_7 3120");
System.exit(0);
}
// 문자열을 숫자로 변환한다. 입력한 값이 숫자가 아닐 경우 예외가 발생한다.
int money = Integer.parseInt(args[0]);
System.out.println("money=" + money);
int[] coinUnit = { 500, 100, 50, 10 }; // 동전의 단위
int[] coin = { 5, 5, 5, 5 }; // 단위별 동전의 개수
for (int i = 0; i < coinUnit.length; i++) {
int coinNum = 0;
/*
* (1) 아래의 로직에 맞게 코드를 작성하시오. 1. 금액(money)을 동전단위로 나눠서 필요한 동전의
* 개수(coinNum)를 구한다. 2. 배열 coin에서 coinNum만큼의 동전을 뺀다. (만일 충분한 동전이 없다면
* 배열 coin에 있는 만큼만 뺀다.) 3. 금액에서 동전의 개수(coinNum)와 동전단위를 곱한 값을 뺀다.
*/
// 1. 금액(money)을 동전단위로 나눠서 필요한 동전의 개수(coinNum)를 구한다
coinNum = money/coinUnit[i];
// 2. 배열 coin에서 coinNum만큼의 동전을 뺀다.
// (만일 충분한 동전이 없다면 배열 coin에 있는 만큼만 뺀다.)
if(coin[i] >= coinNum) {
coin[i] -= coinNum;
} else {
coinNum = coin[i];
coin[i] = 0;
}
// 3. 금액에서 동전의 개수(coinNum)와 동전단위를 곱한 값을 뺀다.
money -= coinNum*coinUnit[i];
System.out.println(coinUnit[i] + "원: " + coinNum);
}
if (money > 0) {
System.out.println("거스름돈이 부족합니다.");
System.exit(0); // 프로그램을 종료한다.
}
System.out.println(" 남은 동전의 개수 =");
for (int i = 0; i < coinUnit.length; i++) {
System.out.println(coinUnit[i] + "원:" + coin[i]);
}
}
// // 1. 금액(money)을 동전단위로 나눠서 필요한 동전의 개수(coinNum)를 구한다.
// coinNum = money/coinUnit[i];
// // 2. 배열 coin에서 coinNum만큼의 동전을 뺀다.
// // (만일 충분한 동전이 없다면 배열 coin에 있는 만큼만 뺀다.)
// if(coin[i] >= coinNum) {
// coin[i] -= coinNum;
// } else {
// coinNum = coin[i];
// coin[i] = 0;
// }
// // 3. 금액에서 동전의 개수(coinNum)와 동전단위를 곱한 값을 뺀다.
// money -= coinNum*coinUnit[i];
// [해설] 주어진 로직대로만 작성하면 별 어려움 없이 풀 수 있었을 것이라 생각한다. 문제
// 5-6을 이해했다면 이 문제도 쉽게 이해될 것이므로 자세한 설명은 생략한다.
// 이 예제를 발전시켜 자판기 프로그램을 작성해보면 좋은 공부가 될 것이다.
}
'프로그래밍 > 자바의정석_5_연습문제' 카테고리의 다른 글
[5-6] 다음은 거스름돈을 몇 개의 동전으로 지불할 수 있는지를 계산하는 문제이다. (0) | 2015.01.05 |
---|---|
[5-5] 다음은 1과 9사이의 중복되지 않은 숫자로 이루어진 3자리 숫자를 만들어내는 프로그램이다. (0) | 2015.01.05 |
[5-4] 2차원 배열 arr2에 담긴 모든 값의 총합과 평균을 구하는 프로그램을 완성하시오. (0) | 2015.01.05 |
[5-3] 배열 arr에 담긴 모든 값을 더하는 프로그램을 완성하시오. (0) | 2015.01.05 |
[5-2] 다음과 같은 배열이 있을 때, arr[3].length의 값은 얼마인가? (0) | 2015.01.05 |