본문 바로가기
Algorithm/백준풀이

[알고리즘 문제풀이] 백준 2293 동전 1(JAVA코드)

by 계범 2022. 4. 4.

목차

    https://www.acmicpc.net/problem/2293

     

    2293번: 동전 1

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

    www.acmicpc.net

    /**
     * 1. n개의 동전 종류를 이용해 k원 맞추기
     * 
     * 2. 모든 경우의 수 출력
     * 
     * 3. 완탐은 불가능하므로 DP 사용
     * 
     * 4. DP[가치] = 경우의 수
     * 
     * 5. 2중 포문으로 동전과 가치를 돌려,
     *    각 동전마다 가치에 나올 수 있는 경우의수를 구하고
     *    더해가며 진행
     * 
     * 6. 가치 다음에 동전을 돌리면 중복이 존재함..
     */
    
    import java.util.*;
    import java.io.*;
    
    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[] coin = new int[n];
    
            for(int i = 0; i < n; i++){
                coin[i] = Integer.parseInt(br.readLine());
            }
    
            int[] dp = new int[k+1];
    
            dp[0] = 1;
    
            for(int i = 0; i < n; i++){
                int v = coin[i];
                for(int j = v; j <= k; j++){
                    dp[j] += dp[j-v];
                }
            }
            System.out.println(dp[k]);
        }
    }

    댓글