Skip to content

Commit 7b11908

Browse files
committed
[Gold V] Title: 동전, Time: 104 ms, Memory: 14696 KB -BaekjoonHub
1 parent 98351be commit 7b11908

File tree

2 files changed

+81
-0
lines changed

2 files changed

+81
-0
lines changed
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
# [Gold V] 동전 - 9084
2+
3+
[문제 링크](https://www.acmicpc.net/problem/9084)
4+
5+
### 성능 요약
6+
7+
메모리: 14696 KB, 시간: 104 ms
8+
9+
### 분류
10+
11+
다이나믹 프로그래밍, 배낭 문제
12+
13+
### 제출 일자
14+
15+
2025년 3월 21일 14:57:44
16+
17+
### 문제 설명
18+
19+
<p>우리나라 화폐단위, 특히 동전에는 1원, 5원, 10원, 50원, 100원, 500원이 있다. 이 동전들로는 정수의 금액을 만들 수 있으며 그 방법도 여러 가지가 있을 수 있다. 예를 들어, 30원을 만들기 위해서는 1원짜리 30개 또는 10원짜리 2개와 5원짜리 2개 등의 방법이 가능하다.</p>
20+
21+
<p>동전의 종류가 주어질 때에 주어진 금액을 만드는 모든 방법을 세는 프로그램을 작성하시오.</p>
22+
23+
### 입력
24+
25+
<p>입력의 첫 줄에는 테스트 케이스의 개수 T(1 ≤ T ≤ 10)가 주어진다. 각 테스트 케이스의 첫 번째 줄에는 동전의 가지 수 N(1 ≤ N ≤ 20)이 주어지고 두 번째 줄에는 N가지 동전의 각 금액이 오름차순으로 정렬되어 주어진다. 각 금액은 정수로서 1원부터 10000원까지 있을 수 있으며 공백으로 구분된다. 세 번째 줄에는 주어진 N가지 동전으로 만들어야 할 금액 M(1 ≤ M ≤ 10000)이 주어진다.</p>
26+
27+
<p>편의를 위해 방법의 수는 2<sup>31</sup> - 1 보다 작고, 같은 동전이 여러 번 주어지는 경우는 없다.</p>
28+
29+
### 출력
30+
31+
<p>각 테스트 케이스에 대해 입력으로 주어지는 N가지 동전으로 금액 M을 만드는 모든 방법의 수를 한 줄에 하나씩 출력한다.</p>
32+
Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
import java.io.BufferedReader;
2+
import java.io.IOException;
3+
import java.io.InputStreamReader;
4+
import java.util.*;
5+
6+
public class Main {
7+
8+
public static void main(String[] args) throws IOException{
9+
10+
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
11+
12+
int T = Integer.parseInt(br.readLine());
13+
14+
StringTokenizer st;
15+
for(int i =0; i<T; i++) {
16+
int N = Integer.parseInt(br.readLine());
17+
18+
int coins[] = new int[N+1];
19+
20+
st = new StringTokenizer(br.readLine());
21+
22+
for(int j = 1; j<=N; j++) {
23+
coins[j] = Integer.parseInt(st.nextToken());
24+
}
25+
int M = Integer.parseInt(br.readLine());
26+
int dp[] = new int[M+1];
27+
28+
for(int k = 1; k<=N; k++) {
29+
for(int h = 1; h<=M; h++) {
30+
if(h - coins[k] >0) {
31+
dp[h] = dp[h] + dp[h-coins[k]];
32+
}
33+
else if(h - coins[k] ==0 ) {
34+
dp[h]++;
35+
}
36+
}
37+
}
38+
System.out.println(dp[M]);
39+
}
40+
41+
42+
43+
44+
45+
46+
}
47+
48+
49+
}

0 commit comments

Comments
 (0)