[BOJ]2293コイン1


🔗 Problem


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

👩‍💻 Code

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

// 동전 1

public class BJ2293 {
	
	static int n;
	static int k;
	static int[] coin;
	static int[] dp;
	
	public static void main(String[] args) throws IOException {
		
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		StringTokenizer st = new StringTokenizer(br.readLine());
		n = Integer.parseInt(st.nextToken());
		k = Integer.parseInt(st.nextToken());
		
		coin = new int[n];
		dp = new int[k+1];
		
		for(int i = 0; i < n; i++) {
			coin[i] = Integer.parseInt(br.readLine());
		}
		
		dp[0] = 1;
		for(int i = 0; i < n; i++) {
			for(int j = coin[i]; j <= k; j++) {
				dp[j] += dp[j - coin[i]];
			}
		}
		
		System.out.println(dp[k]);
	}
	

}

💡 Learned

아이디어
  • dp点火式に時間がかかった.
  • 最初にdpを2次元配列と宣言し、行を各硬貨、列を1~kとした.
  • dp[x][y]の場合、0からxの硬貨でyの数を表す.
  • 맞았습니다他の解答を参考にして、一次元配列で修正することもできます.