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 값을 출력해주면 된다.
'코딩테스트 > 자바 문제풀이' 카테고리의 다른 글
[그리디] 백준 2217 로프 (0) | 2024.08.21 |
---|---|
[그리디] 백준 1343 폴리오미노 (0) | 2024.08.20 |
[수학] 백준 22943 수 (0) | 2024.08.18 |
[수학] 백준 1747 소수&팰린드롬 (0) | 2024.08.17 |
[수학] 백준 21275 폰 호석만 (0) | 2024.08.16 |