본문 바로가기

Algorithm/BeakJoon

[BeakJoon 2293] 동전 1

안녕하세요. 이번 포스팅에서는 저번 포스팅에 이어 동전 1을 풀어보도록 하겠습니다.

(저번 포스팅)

https://chanho0912.tistory.com/78?category=870985 

 

[BeakJoon 2204] 동전 2

안녕하세요. 이번 포스팅에서는 백준 2204 동전 2 문제를 풀어보도록 하겠습니다. 해당 문제는 https://www.acmicpc.net/problem/2294 2294번: 동전 2 첫째 줄에 n, k가 주어진다. (1 ≤ n ≤ 100, 1 ≤ k ≤ 10,..

chanho0912.tistory.com

 

이번에 풀어 볼 문제는 

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

 

2293번: 동전 1

첫째 줄에 n, k가 주어진다. (1 ≤ n ≤ 100, 1 ≤ k ≤ 10,000) 다음 n개의 줄에는 각각의 동전의 가치가 주어진다. 동전의 가치는 100,000보다 작거나 같은 자연수이다.

www.acmicpc.net

위 링크에서 확인하실 수 있습니다.

 

 

저번에는 만들 수 있는 동전의 조합 중 최소의 개수를 사용하는 방법을 묻는 문제였다면, 이번에는 모든 경우의 수를 묻는 문제입니다.

 

초기값 dp[0] = 1로 설정해 주시고, 

저번과 같은 순서로 탐색을 진행하며, 이번에는 만들 수 있는 모든 경우의 수를 구하는 경우이므로 모두 더해주시면 됩니다.

 

<소스 코드>

#include <bits/stdc++.h>
using namespace std;

int n, k, dp[100004];
vector<int> v;
int main(void) {
	ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL);
	cin >> n >> k;
	
	for(int i = 0; i < n; i++) {
		int a; cin >> a;
		v.push_back(a);
	}
	
	dp[0]=1;
	for(auto coin : v) {
		for(int j = 0; j <= k; j++) {
			if(j-coin >= 0) dp[j] += dp[j-coin];
		}
	}
	cout << dp[k];
	
	return 0;
}

 

*저의 글에 대한 피드백이나 지적은 언제나 환영합니다. 

'Algorithm > BeakJoon' 카테고리의 다른 글

[BeakJoon 19942] 다이어트  (0) 2021.09.26
[BeakJoon 17471] 게리맨더링  (0) 2021.09.26
[BeakJoon 2204] 동전 2  (0) 2021.09.08
BeakJoon 15591 MooTube (Silver)  (0) 2021.09.01
[BeakJoon 1480] 보석 모으기  (0) 2021.08.30