거스름돈을 몇 개의 동전으로 지불할 수 있는지를 계산하는 문제이다. 변수 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 |
보기에 간편하고 문제도 없지만 배열을 사용하면 깔끔하게 정리할 수 있다.
- int형 배열을 선언하고 거스름돈의 단위를 넣은 다음,
- 배열의 값을 하나씩 꺼내면서 money 를 값으로 나눈 값을 차례대로 출력하고,
- money에 그 동전 단위로 나눈 나머지값으로 재설정해준다.
public static void main(String[] args) { // 큰 금액의 동전을 우선적으로 거슬러줘야 한다. int[] coinUnit = { 500, 100, 50, 10 }; 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원짜리가 없다거나, 다른 나라의 화폐단위로 바뀌는 경우에도 배열만 수정하면 되므로 간편하다.