자료구조와 알고리즘

동전교환 (DFS)

binaryyoung 2023. 1. 25. 00:01

첫 번째 줄에 동전 종류의 개수 n

두 번째 줄에 동전의 종류가 n개
세 번째 줄에 거슬러 줄 돈 change가 주어질 때

거슬러 줄 동전이 최소가 되는 개수를 출력하라.

intput)

3

1 3 5

15

 

output)
3

import java.util.*;
  
public class Main {
  static int n, change, min = Integer.MAX_VALUE;
  static int[] arr;
  
  private static void solution(int cnt, int change) {
    if (min < cnt) return;
    
    if (change == 0) {
      min = Math.min(min, cnt);
      return;
    }
    
    for (int i = n - 1; i >= 0; i--) {
    	if (change >= arr[i]) {
          	// 동전을 사용한다. (사용한 동전의 개수 1 증가, 잔액을 해당 동전만큼 차감)
        	solution(cnt + 1, change - arr[i]);
        }
    }
  }
  
  public static void main(String[] args){
    Scanner in = new Scanner(System.in);
    n = in.nextInt();
		arr = new int[n];
    for (int i = 0; i < n; i++) {
      arr[i] = in.nextInt();
    }
    change = in.nextInt();
    
    Arrays.sort(arr);
    
    solution(0, change);
    
    System.out.println(min);
  }
}