우리 회고 14팀 인규님의 코드이다.
import java.util.Scanner;
public class Problem3 {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("금액을 넣으세요 [숫자입력]");
int money =0;
try {
money = scanner.nextInt();
if(money%10!=0){
System.out.println("최소 10원단위로 입력해주세요.");
return ;
}
calculateMoney(money);
}catch (Exception e){
System.out.println("숫자만 입력하세요 프로그램을 다시 시작해주세요");
return ;
}
static void calculateMoney(int money){
int[] moneyUnit = {50000, 10000, 5000, 1000, 500, 100, 50, 10};
for (int i : moneyUnit) {
System.out.println(i + "원" + (money / i) + "개");
money%=i;
}
}
}
우리 회고팀 인규님의 코드의 forEach문을 for문으로 바꾸어 보았다. 생각보다 오류가 생겼고 그 과정에서 int i = 0으로 할 경우 moneyUnit[0]이 되어 50000원이 포함되어 연산되지만 (money / i) 가 0으로 나누는 꼴이 되어 Exception이 발생하였고, int i = 1로 할경우 Exception이 발생하지는 않지만 moneyUnit[1]이 되어 50000원이 연산되지 않는 상황이 발생하였다.
그래서 System.out.println(moneyUnit[i] + "원" + (money / moeyUnit[i]) + "개"); 로 바꿔주었고 money = money % i 도 money = money % moneyUnit[i]로 바꾸어주었다.
import java.util.Scanner;
class CurrencyCount3 {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("금액을 넣으세요 : [숫자입력]");
int money = 0;
//유효성 검사
try {
money = scanner.nextInt();
if (money % 10 != 0) {
System.out.println("최소 10원 단위로 입력해주세요.");
return;
}
//메서드 실행
calculateMoney(money);
} catch (Exception e) { //Exception : 배열의 범위를 넘어가서 연산을 하는경우 발생한다.
System.out.println("숫자만 입력하세요. 프로그램을 다시 시작해주세요");
return;
}
}
static void calculateMoney(int money) {
int[] moneyUnit = {50000, 10000, 1000, 500, 100, 50, 10}; //크기가 7인 배열
for (int i = 0; i < moneyUnit.length; i++) {
System.out.println(moneyUnit[i] + "원" + (money / moneyUnit[i]) + "개");
money = money % moneyUnit[i];
}
}
}
김경록 강사님의 생각하는 방식의 접근법을 살려준 코드이다.
import java.util.Scanner;
/**
* 현금으로 돈을 받고 25000원을 거슬러 주어야 합니다
* 5만원 짜리는 몇장, 만원짜리는 몇장, 5천원짜리는 몇장을 거슬러주어야 할까요?
* -> 나머지 연산을 할 수 있는가?
*/
class CurrencyCount2 {
public static void main(String[] args) {
int currency50000 = 50000;
int currency10000 = 10000;
int currency5000 = 5000;
int currency1000 = 1000;
int currency500 = 500;
int currency100 = 100;
//raw 익히지 않은
Scanner sc = new Scanner(System.in);
System.out.println("화폐의 액수를 입력해주세요 : ");
int refund = sc.nextInt();
/**
* 25,000원을 각 화폐 단위로 나누었을 때 몫과 나머지를 출력하는 코드를 작성해주세요
* 각 화폐 단위는 위와 같이 각각 변수로 선언해주세요.
*/
//25,000원을 50,000원으로 나누었을 때 몫, 나머지
System.out.printf("5만원권 %d장\n", refund / currency50000);
//25,000원을 10,000원으로 나누었을 때 몫, 나머지
System.out.printf("1만원권 %d장, 나머지 : %d\n", refund / currency10000, refund % currency10000);
//5,000원 권은 한장만 나오게 하고 싶다. 왜냐하면 20,000원은 만원짜리 두개로 처리했기 때문이다.
//refund = refund - (currency10000 * 2);
refund = refund % 10000;
//refund는 25,000원을 1원으로 나눈 나머지로 값을 업데이트 한다.
refund = refund % 5000;
System.out.printf("5천원권 %d장, 나머지 : %d\n", refund / currency5000, refund % currency5000);
refund = refund % 1000;
System.out.printf("1천원권 %d장, 나머지 : %d\n", refund / currency1000, refund % 1000);
refund = refund % 500;
System.out.printf("5백원 %d개, 나머지 : %d\n", refund / currency500, refund % 500);
refund = refund % 100;
System.out.printf("1백원 %d개, 나머지 : %d\n", refund / currency100, refund % 100);
}
}
'멋쟁이 사자처럼 2기 150일간의 기록' 카테고리의 다른 글
멋쟁이 사자처럼 백엔드스쿨 2기 17일차 D - 134 (자바심화 - 컬렉션, 제네릭) (0) | 2022.10.05 |
---|---|
멋쟁이 사자처럼 백엔드스쿨 2기 16일차 D - 135 과제 (0) | 2022.10.04 |
멋쟁이 사자처럼 백엔드스쿨 2기 16일차 D - 135 (Git, SourceTree 사용방법) (0) | 2022.10.04 |
단순 삽입정렬이란? InsertionSort (1) | 2022.09.29 |
단순 삽입정렬이란? (0) | 2022.09.28 |