백준

백준 2293 동전 1, c++

2024. 3. 1. 23:45

 

 

 

작성한 코드는 다음과 같다.

다이나믹 프로그래밍을 사용하여 구현하는 문제였다.

첫번째 for문에서는 입력받은 n개의 경우로 만들 수 있는 경우의 수를 세주고

두번째 for문에서는 1부터 k까지를 몇가지 방식으로 만들 수 있는 지를 계산한다.

최종은 dp[k]를 출력한다.

 

예를 들어

0부터 k까지의 모든 수를, 1로 만들 수 있는 경우의 수를 먼저 (dp배열에) 계산하고

0부터 k까지의 모든 수를, 2까지 추가됐을 때 만들 수 있는 경우의 수를 기존 (dp배열에) 에 더해주고

0부터 k까지의 모든 수를, 5까지 추가됐을 때 만들 수 있는 경우의 수를 기존 (dp배열에) 에 더해주는 방식을 사용한다.

#include <iostream>
#include <vector>
using namespace std;

int main() {
	int n, k;
	cin >> n >> k;
	vector<int> arr(n);
	vector<int> dp(k+1);
	for (int i = 0; i < n; i++)
		cin >> arr[i];

	dp[0] = 1;	
	for (int i = 0; i < n; i++) { 
		for (int j = arr[i]; j <= k; j++) { 
			dp[j] +=dp[j - arr[i]];
		}
	}

	cout<<dp[k]<<endl;
	return 0;
}

 

 

 

 

 

'백준' 카테고리의 다른 글

백준 1303 전쟁 - 전투, c++  (0) 2024.03.03
백준 2294 동전2, c++  (0) 2024.03.02
백준 3085 사탕 게임, c++  (0) 2024.02.29
백준 1789 수들의 합, c++  (0) 2024.02.29
백준 2504 괄호의 값, c++  (0) 2024.02.28