동전의 종류의 개수 n이 주어진다.
그리고 그 동전의 종류만큼 동전이 주어지고 거슬러 줄 금액 m이 주어진다
동전의 종류들을 더해서 m을 만드는데 최소동전의 개수를 구해야한다
만약 1, 2, 5의 동전이 주어지고 거슬러야되야 되는 돈 m이 15라면
5+5+5 = 15로 정답은 3이다
import java.util.Arrays;
import java.util.Collections;
import java.util.Scanner;
public class Inf8_5ExchangeCoin {
private static int n, m, total = 500;
private static Integer[] coins;
private static void dfs(int cnt, int sum) {
if(total <= cnt) return;
if(sum > m) return;
if(sum == m) {
total = Math.min(total,cnt);
} else {
for(int i=0; i<n; i++) {
dfs(cnt+1, sum+coins[i]);
}
}
}
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
n = sc.nextInt();
coins = new Integer[n];
for(int i=0; i< coins.length; i++) {
coins[i] = sc.nextInt();
}
Arrays.sort(coins, Collections.reverseOrder());
m = sc.nextInt();
dfs(0,0);
System.out.println(total);
}
}
순열의 개념을 하나하나 적어서 이해하는 것
시간복잡도를 줄이기위한 노력(배열 내림차순)
꾸준히 시간복잡도를 줄이기위한 사고를 하자