1. 문제

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

 

9084번: 동전

우리나라 화폐단위, 특히 동전에는 1원, 5원, 10원, 50원, 100원, 500원이 있다. 이 동전들로는 정수의 금액을 만들 수 있으며 그 방법도 여러 가지가 있을 수 있다. 예를 들어, 30원을 만들기 위해서는

www.acmicpc.net

2. 접근방법

동전 갯수 구할 금액 : M

동전 종류 : N1, N2, ... NN

1. 1~M원까지 N1으로 만들수 있는 갯수 구해서 dp배열에 저장

2. 구할 때 dp[구할금액 - N1]에 구해진 갯수를 + 해주면 구하기 쉬움.

3. N1으로 만들어진 dp배열 위에 2번 방법으로 N2도 써서 구할 수 있는 갯수 구하기

4. NN까지 반복

5. dp[M] 출력

 

3. 자바 코드

package Gold;

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.Arrays;

public class G5_9084동전 {

	public static void main(String[] args) throws Exception {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		int T = Integer.parseInt(br.readLine());
		for (int tc = 0; tc < T; tc++) {
			br.readLine();
			int[] arr = Arrays.stream(br.readLine().split(" ")).mapToInt(Integer::parseInt).toArray();
			int money = Integer.parseInt(br.readLine());
			int dp[] = new int[money + 1];
			dp[0] = 1;
			for (int cost : arr)
				for (int i = cost; i < money + 1; i++)
					dp[i] += dp[i - cost];
			System.out.println(dp[money]);
		}
	}
}

4. 마치며

오랜만에 디피 풀었더니 조금 헷갈리는 느낌.

'알고리즘 문제풀이 > 백준' 카테고리의 다른 글

[백준] 5557 1학년  (0) 2021.11.23
[백준] 1726 로봇  (0) 2021.11.20
[백준] 11000 강의실 배정  (0) 2021.11.04
[백준] 2357 최솟값과 최댓값  (0) 2021.11.02
[백준] 2250 트리의 높이와 너비  (0) 2021.11.01

+ Recent posts