본문 바로가기

Java/실습

[Java] 거스름돈 환전

오늘은 예제 실습 문제를 많이 풀어볼 것 같습니다.

 

먼저 거스름돈 환전 문제를 풀어보겠습니다.

 

물건의 값과 지불한 돈을 입력받고

 

거스름돈을 출력할건데

 

거스름돈을 한국 원화 단위로 나눠서 출력하려고 합니다.

 

최대한 함수를 사용해서 풀어보겠습니다.

 

 

//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