본문 바로가기
개발 & 기술

[Java] 배열과 대입연산자를 이용해서 돈의 지폐 단위 세기

by chococake 2021. 7. 1.

공부하면서 쉬워 보였지만 막상 해보니 로직을 구현하는 게 쉽지 않았던 예제였다. 물론 로직의 최종 결과물은 생각보다 간단히 나왔다. 내가 짠 건 거의 막일에 가까운 코드였는데 여러 가지 생각을 해보면 그렇게 복잡한 로직은 아니었다.

 

먼저 전체적인 코드를 살펴보자.

 

 

스캐너를 통해서 값을 받아와서 그 값을 각 단위별로 쪼개는 로직이다. 각 단위의 설정은 배열로 설정을 했고 반복문을 통해서 입력값의 단위를 구현했다. 또한 프로그램의 종료를 위해서 -1이라는 값을 하나의 기능으로 설정했다.

 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
package ex20210628;
 
import java.util.Scanner;
 
public class ArrayExam06 {
 
    public static void main(String[] args) {
        
        
        Scanner scan = new Scanner(System.in);
        
        int[] don = new int[] {5000010000500010005001005010};
        
        while(true) {
            System.out.println("금액을 입력하시오(나가기 -1) : ");
            int money = scan.nextInt();
            if(money == -1) {
                break;
            }
            
            for(int i = 0; i<don.length; i++) {
                System.out.println(don[i] + "원 : " + (money/don[i]));
                money %= don[i]; // money를 don[i]로 나누고 그 나머지를 money에 대입한다. 
            }
        }
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
 
 
    }
 
}
 
cs

 

코드를 살펴보기 앞서서 대입연산자 중 하나를 살펴보고 간다면 조금 더 수월하게 로직을 이해할 수 있을 것이다. 그 녀석은 바로 '%='라는 친구다. 이 친구는 무슨 역할을 하는지 하나의 예시를 들어보려고 한다.

 

예를 들어서 money %= 300이라고 했을 때 money를 2000이라고 할 경우 2000 %= 300이 된다. 이 말은 왼쪽 값을 오른쪽 값으로 나누고 그 나머지를 다시 왼쪽 값에 대입한다는 것이다. 그래서 money가 2000일 때, money %= 300이라고 코드를 쓸 경우 money는 200이 된다. 왜냐하면 2000을 300으로 나누면 몫이 6이 되고 나머지가 200이기 때문이다. 

 

 

그럼 이제 본격적으로 코드를 살펴보자

 

먼저 우리는 돈의 단위로 값을 구분한다고 설정하고 오만 원, 만원, 오천 원, 천 원, 오백 원, 백 원, 오십 원, 십원으로 나누고 각각의 단위를 배열로 묶어주었다. 이렇게 배열로 묶어주면 for문을 이용해서 짧은 코드 안에 원하는 값은 구현하기 용이하다.

1
2
3
4
5
6
7
8
9
10
Scanner scan = new Scanner(System.in);
        
        int[] don = new int[] {5000010000500010005001005010};
        
        while(true) {
            System.out.println("금액을 입력하시오(나가기 -1) : ");
            int money = scan.nextInt();
            if(money == -1) {
                break;
            }
cs

 

그리고 전체적인 프로그램을 실행하는 측면에서 while문을 작성한 다음에 scan으로 값을 받아왔다. 또한 여기서 프로그램을 종료하기 위한 장치로 -1을 입력하면 종료가 되게끔 구현했다.

 

 

그러고 나서 반복문을 통해서 입력값이 어느 단위가 얼마나 있는지를 출력하면 된다.

1
2
3
4
for(int i = 0; i<don.length; i++) {
                System.out.println(don[i] + "원 : " + (money/don[i]));
                money %= don[i]; // money를 don[i]로 나누고 그 나머지를 money에 대입한다. 
            }
cs

먼저 입력값을 가장 큰 단위인 50000으로 나눈다. 여기서 50000은 배열의 첫번째 값이므로 don [0]이 된다. 그런 다음에 입력받은 money의 값을 다시 초기화해야 하는데 입력값 - 단위(처음에는 50000)가 새로운 money로 초기화가 된다. 위에서 언급한 대로 여기서 대입 연산자 '%='를 이용한다. 

 

예를 들어서 처음에 74807를 받아왔다고 설정을 해보자. 그러면 처음에는 74807을 50000으로 나누면 몫이 1이 된다. 그러면 오만 원은 1장이 있는 것이다. 그리고 74807에서 50000을 뺀 24807이 새로운 money가 되는 것이다. 그러고 나서 24807은 새로운 단위인 만원으로 나뉘게 되고 그렇게 되면 또 몫이 2, 나머지가 4807이 된다. 여기서 나머지인 4870이 또 새로운 money로 초기화가 되는 것이다.

 

 

실제로 이 코드를 봤을 때 내가 짠 코드와 많이 다르지는 않았다. 나 역시 방식으로 코드를 구현하겠다는 생각은 했었다. 하지만 그 단위값을 어떤 식으로 나눠줘야 할지가 고민이 되었는데 이 코드를 보니 %=라는 대입 연산자를 통해서 간단하게 구현한 것을 알 수 있었다. 비록 %=를 얼마나 사용할지는 잘 모르겠지만 알아둔다면 충분히 괜찮은 옵션이 될 것 같다.

댓글