코딩테스트/자바 문제풀이

[그리디] 백준 14916 거스름돈

승요나라 2024. 8. 19. 18:40

14916번: 거스름돈

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

 

# 코드

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int n = Integer.parseInt(br.readLine());

        // n이 1이거나 3일 경우 거슬러 줄 수 없음
        if (n == 1 || n == 3) {
            System.out.println(-1);
        } else {
            int last_num = n % 10;

            switch (last_num) {
                case 0:
                case 5:
                    System.out.println(n/5);
                    break;
                case 1:
                case 6:
                    System.out.println(3 + (n-6)/5);
                    break;
                case 2:
                case 7:
                    System.out.println(1 + (n-2)/5);
                    break;
                case 3:
                case 8:
                    System.out.println(4 + (n-8)/5);
                    break;
                case 4:
                case 9:
                    System.out.println(2 + (n-4)/5);
                    break;
            }
        }
        br.close();
    }
}
  • 그리디 문제였지만 경우의 수를 따져 풀이해보았다.

 

그리디 알고리즘을 통해 작성한 코드는 아래와 같다.

import java.io.*;

public class Main {
    public static void main(String[] args) throws IOException {
        int count = 0;
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int N = Integer.parseInt(br.readLine());

        while (N > 0) {
            if (N % 5 == 0) {
                N -= 5;
                count++;
            } else {
                N -= 2;
                count++;
            }
        }
        if (N < 0) {
            System.out.println(-1);
        } else {
            System.out.println(count);
        }
        br.close();
    }
}
  • 그리디 알고리즘은 그때그때 단순하게 N이 5로 나누어지면 5원으로 거슬러주고, 그렇지 않으면 2원을 거슬러준다.
  • 5원과 2원으로 거슬러줄 수 없는 경우 while문 이후 N이 음수가 되기 때문에 N 값을 따져 -1 혹은 count 값을 출력해주면 된다.