본문 바로가기

Java

자바(Java) 거스름돈 계산

거스름돈을 몇 개의 동전으로 지불할 수 있는지를 계산하는 문제이다. 변수 money의 금액을 동전으로 바꾸었을 때 각각 몇 개의 동전이 필요한지 계산해서 출력하라. 단, 가능한 한 적은 수의 동전으로 거슬러 주어야 한다.

사실 나눗셈과 나머지 연산자를 이용하면 단순 수학만으로도 풀 수 있는 문제다.
2750원이 들어온다고 하면 2750원을 500원으로 나눈 값이 곧 500원이 개수가 되고, 나머지를 다시 100원으로 나눈 몫이 100원의 개수가 되는 형식이다. 
기본서에 자주 등장하는 자판기 프로그램에 등장하는 형식으로 바꾼다면 이렇게 될 것이다.
public static void main(String[] args) {
    GetChange getChange = new GetChange();
    getChange.getChange(9700);
           
}
private void getChange(int money) {
           
    System.out.println("잔돈: " + money + "원");
           
    int ocheon = 0;
    int cheon = 0;
    int obeak = 0;
    int beak = 0;
 
    ocheon = money / 5000;
    cheon = money % 5000 / 1000;
    obeak = money % 5000 % 1000 / 500;
    beak = money % 5000 % 1000 % 500 / 100;
           
    System.out.println("오천원 : "+ocheon);
    System.out.println("천원 : "+cheon);
    System.out.println("오백원 : "+obeak);
    System.out.println("백원 : "+beak);
}
cs


보기에 간편하고 문제도 없지만 배열을 사용하면 깔끔하게 정리할 수 있다. 
  1. int형 배열을 선언하고 거스름돈의 단위를 넣은 다음, 
  2. 배열의 값을 하나씩 꺼내면서 money 를 값으로 나눈 값을 차례대로 출력하고,
  3. money에 그 동전 단위로 나눈 나머지값으로 재설정해준다.  
public static void main(String[] args) {
    // 큰 금액의 동전을 우선적으로 거슬러줘야 한다.
    int[] coinUnit = { 5001005010 };
    int money = 2680;
    System.out.println("money=" + money);
    for (int i = 0; i < coinUnit.length; i++) {
        System.out.println(coinUnit[i]+"원: "+ money / coinUnit[i]);
        money%= coinUnit[i];
    }
// main
cs

동전이 아니라 지폐로 단위가 바뀌거나, 10원짜리가 없다거나, 다른 나라의 화폐단위로 바뀌는 경우에도 배열만 수정하면 되므로 간편하다.