알고리즘/백준

BOJ) 동전 1

Zin0_0 2020. 7. 18. 21:56
반응형

동전 1

 

2293번: 동전 1

첫째 줄에 n, k가 주어진다. (1 ≤ n ≤ 100, 1 ≤ k ≤ 10,000) 다음 n개의 줄에는 각각의 동전의 가치가 주어진다. 동전의 가치는 100,000보다 작거나 같은 자연수이다.

www.acmicpc.net

풀이

 

n 가지 종류의 동전을 각각 여러개 이용해서 k원이 되게 하는 수를 구하는 문제다.

처음에는 dfs로 접근했다가, 동전은 몇개라도 사용할 수 있다는 조건을 보고 DP로 선회했다.

각각 동전에 대해서 K원 이하일 때, 쓰일 수 있는 모든 돈에 경우의 수를 추가시켜주었다.

 

for문을 돌면서 각 동전 coin에 대해coin의 가치부터 K원 까지 들어갈 수 있는 경우만 추가시켜주면 해결되는 문제였다.

 

코드

 

코드

 

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

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st = new StringTokenizer(br.readLine());
        int n = Integer.parseInt(st.nextToken());
        int k = Integer.parseInt(st.nextToken());
        int[] coinArr = new int[n];
        for(int i=0; i<n; i++) {
            coinArr[i] = Integer.parseInt(br.readLine());
        }
        br.close();
        solution(n,k,coinArr);
    }

    private static void solution(int n, int k, int[] coinArr) {
        int[] dp = new int[k+1];
        dp[0] =1;
        for(int coin : coinArr) {
            for(int j=coin; j<=k; j++) {
                if(j-coin >=0) { dp[j] += dp[j - coin]; }
            }
        }
        
        System.out.println(dp[k]);
    }
}
반응형