오늘은 예제 실습 문제를 많이 풀어볼 것 같습니다.
먼저 거스름돈 환전 문제를 풀어보겠습니다.
물건의 값과 지불한 돈을 입력받고
거스름돈을 출력할건데
거스름돈을 한국 원화 단위로 나눠서 출력하려고 합니다.
최대한 함수를 사용해서 풀어보겠습니다.
//50000: 최적의 상태로 몇개씩 주어야 할지
//10000:
// 5000:
// 1000:
// 500:
// 100:
// 50:
// 10:
//나머지..
public static int inputPrice(){
Scanner sc = new Scanner(System.in);
System.out.println("물건 가격을 입력하세요 : ");
int n = sc.nextInt();
return n;
}
public static int outputMoney(){
Scanner sc = new Scanner(System.in);
System.out.println("지불할 금액을 입력하세요 : ");
int n = sc.nextInt();
return n;
}
먼저 물건 가격과 지불할 금액을 입력받습니다.
이떄는 리턴하여 다른 함수에서 파라미터로 쓸 것입니다.
public static int change(int price, int output) {
if(output < price) {
System.out.println("낸 금액이 부족합니다. 낼 금액을 다시 입력해주세요.");
output = outputMoney();
}
return output-price;
}
이 부분에서는 거스름 돈을 구해서 리턴합니다.
입력받은 물건 값과 지불할 돈을 뺀 값을 리턴하는데
지불할 돈이 값에 비해 부족하면 다시 입력받습니다.
public static void remain_money(int n) {
int fifty_thousand = 0;
int ten_thousand = 0;
int five_thousand = 0;
int one_thousand = 0;
int five_hundred = 0;
int one_hundred = 0;
int fifty = 0;
int ten = 0;
int one = 0;
int remain_money = n;
a : while(true) {
if(remain_money >= 50000) {
fifty_thousand = remain_money / 50000;
remain_money = remain_money % 50000;
} else if(remain_money >= 10000) {
ten_thousand = remain_money / 10000;
remain_money = remain_money % 10000;
} else if(remain_money >= 5000) {
five_thousand = remain_money / 5000;
remain_money = remain_money % 5000;
} else if(remain_money >= 1000) {
one_thousand = remain_money / 1000;
remain_money = remain_money % 1000;
} else if(remain_money >= 500) {
five_hundred = remain_money / 500;
remain_money = remain_money % 500;
} else if(remain_money >= 100) {
one_hundred = remain_money / 100;
remain_money = remain_money % 100;
} else if(remain_money >= 50) {
fifty = remain_money / 50;
remain_money = remain_money % 50;}
else if(remain_money >= 10) {
ten = remain_money / 10;
remain_money = remain_money % 10;
} else if(remain_money >= 1){
one = remain_money % 10;
break a;}}
다음은 거스름돈을 원화단위로 나누는 함수입니다.
거스름 돈을 각 단위로 나누고 몫을
해당 원화 변수에 넣고
나머지 거스름돈을 다시 반복문을 돌립니다.
이때 거스름돈이 1원 단위가 되면 break를 사용해서
반복문을 빠져나갑니다.
System.out.printf("총 거스름 돈은 : %d\n", n);
System.out.printf("50000 : %d장\n", fifty_thousand);
System.out.printf("10000 : %d장\n", ten_thousand);
System.out.printf("5000 : %d장\n", five_thousand);
System.out.printf("1000 : %d장\n", one_thousand);
System.out.printf("500 : %d개\n", five_hundred);
System.out.printf("100 : %d개\n", one_hundred);
System.out.printf("50 : %d개\n", fifty);
System.out.printf("10 : %d개\n", ten);
System.out.printf("나머지 : %d원\n", one);}
그리고 원화단위들을 출력해보면
물건 가격을 입력하세요 :
333333
낼 금액을 입력하세요 :
444444
총 거스름 돈은 : 111111
50000 : 2장
10000 : 1장
5000 : 0장
1000 : 1장
500 : 0개
100 : 1개
50 : 0개
10 : 1개
나머지 : 1원
잘 출력되네요!
처음에는 재귀함수를 사용해서
remain_money ( remain_money % 50);
이런 식으로 나머지를 다시 넣고 돌리려했는데
출력이 반복되는 부분을 해결하기 어려워서
반복문을 사용해서 구현해봤습니다.
public static void printChange(int change) {
int [] currency = {50000, 10000, 5000,1000, 500, 100, 50 , 10};
for (int i = 0; i < currency.length; i ++) {
if(change >= currency[i]) {
System.out.printf("%d원권 : %d개\n", currency[i], (change/currency[i]));
change %= currency[i];}}}
그리고 강사님이 작성하신 코드입니다.
배열을 사용하면 보다 쉽고 간결하게 코드를 짤 수 있네요.
배열의 활용 방법에 더 익숙해질 필요가 있다고 느꼈습니다.
이상 거스름돈을 원화단위로 환전하는 실습이었습니다.
'Java > 실습' 카테고리의 다른 글
[Java] 가위 바위 보 (1) | 2024.12.04 |
---|---|
[Java] 배스킨라빈스 31게임 (0) | 2024.12.04 |
[Java] 문자 제거하기 (0) | 2024.12.03 |
[Java] 세균 증식 (0) | 2024.12.03 |
[Java] 최고점과 평균 (0) | 2024.12.03 |