NOTE/BAEKJOON
9084 동전
m-inz
2022. 10. 8. 21:24
import java.io.IOException;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.StringTokenizer;
public class Test {
static int[] dp;
public static void main(String[] args) throws IOException{
// TODO Auto-generated method stub
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
StringTokenizer st;
int T = Integer.parseInt(br.readLine());
for(int testCase=1; testCase<=T; testCase++) {
int N = Integer.parseInt(br.readLine());
st = new StringTokenizer(br.readLine()," ");
int[] coins = new int[N+1];
for(int i=1; i<=N; i++) {
coins[i] = Integer.parseInt(st.nextToken());
}
int M = Integer.parseInt(br.readLine());
dp = new int[M+1];
dp[0]=1;
for(int i=1; i<=N; i++) {
for(int j=coins[i]; j<=M; j++) {
dp[j]+=dp[j-coins[i]];
}
}
bw.write(dp[M]+"\n");
}
bw.flush();
bw.close();
}
}
<2원 동전으로 M원 만들기>
2원 동전으로 2원 만들기 -> 2 + 0
2원 동전으로 3원 만들기 -> 2 + 1
2원 동전으로 4원 만들기 -> 2 + 2
2원 동전으로 5원 만들기 -> 2 + 3
...
dp[M] += dp[M-2]
<3원 동전으로 M원 만들기>
3원 동전으로 3원 만들기 -> 3 + 0
3원 동전으로 4원 만들기 -> 3 + 1
3원 동전으로 5원 만들기 -> 3 + 2
...
dp[M] += dp[M-3]
...
< X원 동전으로 M원 만들기>
dp[M] += dp[M-X]
🏃♀️