Notice
Recent Posts
Recent Comments
Link
«   2025/01   »
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
Tags more
Archives
Today
Total
관리 메뉴

luke

[백준] - 거스름돈 (5585) (자바/Java) 본문

알고리즘문제/백준 문제(Java)

[백준] - 거스름돈 (5585) (자바/Java)

luke-king 2024. 5. 10. 15:55

 

 

 

 

 

https://www.acmicpc.net/problem/5585

 

 

 

 

 

 

 

 

 

문제.


 

 

 

 

 

 

 

 

풀이.


 

public class Main {
    public static void main(String[] args){

        Scanner sc = new Scanner(System.in);

        int money = 1000;
        int m = sc.nextInt();
        sc.close();

        int tot = money - m;
        int change = 0;

        while (tot > 0){
            if (tot >= 500) {
                tot -= 500;
                change++;
            }
            else if (tot >= 100 && tot < 500) {
                tot -= 100;
                change++;
            }
            else if (tot >= 50 && tot < 100) {
                tot -= 50;
                change++;
            }
            else if (tot >= 10 && tot < 50) {
                tot -= 10;
                change++;
            }
            else if (tot >= 5 && tot < 10) {
                tot -= 5;
                change++;
            }
            else if (tot >= 1 && tot < 5){
                tot -= 1;
                change++;
            }

            if (tot == 0) {
                System.out.println(change);
                break;
            }

        }


    }

}

 

이번 문제는 " 거스름돈 " 문제다.

문제를 읽자 제일 먼저 조건식 문제라는 생각이 들었다. 그래서 바로 조건식을 흔히 말하는 하드코딩을 통해서 풀어봤는데 

런타임 에러도 나지 않고 순조롭게 성공이 나왔다.

그럼 바로 풀이로 가보겠다.

 

1. 각 500, 100, 50, 10, 5, 1 원 조건식에 충족하게 짠다.

 

2. 조건식이 맞을때 마다 금액이 줄어들고 몇 번 거슬렀는지 카운트한다.

 

3. 최종적으로 tot변수 금액이 0원이 된다면 break를 걸어주고 총 거스른 횟수를 반환한다.

 

 

 

이렇게 쉽게(?) 풀 수 있는 방법이 있지만 문득 코드가 분명 너무 길고 보다 짧게 만들 수 있을 거 같아 조금 더 생각해 다시 한번 풀어봤다. 

public class Main {
    public static void main(String[] args){

        Scanner sc = new Scanner(System.in);

        int m = sc.nextInt();

        int[] arr = {500, 100, 50, 10, 5, 1};

        int tot = 1000 - m;
        int change = 0;

        for (int i = 0; i < arr.length; i++) {
            if (tot / arr[i] != 0) {
                change += tot / arr[i];
                tot %= arr[i];
            }
        }
        System.out.println(change);

    }

}

 

확실히 위에 코드보다 짧아진 걸 확인할 수 있고 보기에도 편한 걸 알 수 있다.

처음부터 이렇게 간단하고 짧은 코드가 생각나지 않더라도 차근차근 오늘처럼 쉬운 방식으로 풀어보고 다음으로 코드를 줄일 수 있다면 또 다른 방식으로 풀어봐야겠다.