계단을 오르듯이

[JAVA] 14916. 거스름돈 본문

알고리즘/백준_JAVA

[JAVA] 14916. 거스름돈

happyAyun 2022. 1. 28. 22:59

5원과 2원이 있기 때문에 거스름돈을 최소로 주기 위해 5원을 최대로 사용했다.

2원을 위해 5원을 최대로 사용할 경우 남은 거스름돈이 짝수가 되도록 하였으며,

나머지 거스름돈에서 2원으로 거스름돈을 주지 못할 경우는 2로 나누었을 때 나머지 값이 존재하는 상황이므로 -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
package algo;
 
import java.io.BufferedReader;
import java.io.InputStreamReader;
 
public class B_14916_거스름돈 {
 
    public static void main(String[] args) throws Exception {
        BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
        int N = Integer.parseInt(in.readLine());
        int five = N / 5// 5원의 개수
        while ((N - (five * 5)) % 2 != 0) { // 2원을 위해 나머지를 짝수를 만든다
            if (--five <= 0) { // five가 -1이 되면 아래의 연산에 영향을 주므로 0으로 
                five = 0;
                break;
            }
        }
        int two = 0// 2원의 개수
        if ((N - (five * 5)) % 2 == 0) { // 2원으로 나누어 떨어지면 거스름돈 OK
            two = (N - (five * 5)) / 2;
            System.out.println(five + two);
        } else // 그렇지 않으면 -1
            System.out.println(-1);
    }
}
 
cs