목차
문제 정보
https://www.acmicpc.net/problem/9084
9084번: 동전
우리나라 화폐단위, 특히 동전에는 1원, 5원, 10원, 50원, 100원, 500원이 있다. 이 동전들로는 정수의 금액을 만들 수 있으며 그 방법도 여러 가지가 있을 수 있다. 예를 들어, 30원을 만들기 위해서는
www.acmicpc.net
난이도 : G5
유형 : DP, 배낭문제
동일문제
https://www.acmicpc.net/problem/3067
3067번: Coins
우리나라 화폐단위, 특히 동전에는 1원, 5원, 10원, 50원, 100원, 500원이 있다. 이 동전들로는 모든 정수의 금액을 만들 수 있으며 그 방법도 여러 가지가 있을 수 있다. 예를 들어 30원을 만들기 위해
www.acmicpc.net
문제 풀이
배낭문제 유형의 기본문제
이 문제의 공간복잡도는 M이고
동전 종류마다 1 ~ M까지 몇 개씩 사용할 수 있는지 체크하면 된다.
점화식
(dp[0] = 1 초기화)
dp[i] = dp[i] + dp[i- coin종류]
코드
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class Main {
private int T, N, M;
private int[] coins;
private int[] dp;
public void solution() throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringBuilder sb = new StringBuilder();
StringTokenizer st;
T = Integer.parseInt(br.readLine());
while (T-- > 0) {
N = Integer.parseInt(br.readLine());
coins = new int[N];
st = new StringTokenizer(br.readLine());
for (int i = 0; i < N; i++) {
coins[i] = Integer.parseInt(st.nextToken());
}
M = Integer.parseInt(br.readLine());
dp = new int[M + 1];
dp[0] = 1;
for (int coin : coins) {
for (int i = 0; i <= M; i++) {
if (i - coin >= 0) {
dp[i] += dp[i - coin];
}
}
}
sb.append(dp[M]).append('\n');
}
System.out.print(sb);
}
public static void main(String[] args) throws IOException {
new Main().solution();
}
}
'Algorithm, Problem Solving > 백준(boj)' 카테고리의 다른 글
[백준][Java] 2023 - 신기한 소수 (0) | 2023.03.26 |
---|---|
[백준][Java] 20055 - 컨베이어 벨트 위의 로봇 (0) | 2023.03.26 |
[백준][Java] 9205 - 맥주 마시면서 걸어가기 (0) | 2023.03.25 |
[백준][Java] 11292 - 키 큰 사람 (0) | 2023.03.24 |
[백준][Java] 17070 - 파이프 옮기기 1 (0) | 2023.03.24 |
댓글