알고리즘/백준(BOJ)
백준 - 2293 동전1
시나모온
2020. 6. 23. 16:09
문제 링크입니다 : https://www.acmicpc.net/problem/2293
2293번: 동전 1
첫째 줄에 n, k가 주어진다. (1 ≤ n ≤ 100, 1 ≤ k ≤ 10,000) 다음 n개의 줄에는 각각의 동전의 가치가 주어진다. 동전의 가치는 100,000보다 작거나 같은 자연수이다.
www.acmicpc.net
재귀함수 형태로 풀려고 했는데... 어림도 없었다.
시도해보고 재귀함수로 풀면 추가 업로드 해야겠다. (+추가 업로드 했다.)
#include <iostream>
#include <vector>
#include <cstring>
#include <algorithm>
using namespace std;
int main() {
int n, k;
cin >> n >> k;
vector<int> coins(n , 0);
vector<int> values(k + 1, 0);
for(int i = 0; i < n; i++) {
cin >> coins[i];
}
values[0] = 1;
for(int i = 0; i < n; i++) {
for(int j = 1; j <= k; j++) {
if(j >= coins[i]) {
values[j] += values[j - coins[i]];
}
}
}
cout << values[k];
return 0;
}
#include <iostream>
#include <vector>
#include <cstring>
#include <algorithm>
using namespace std;
int n, k;
vector<int> coins;
vector<int> values;
void getValueCnt(int index) {
if(index == n) return;
for(int i = 1; i <= k; i++) {
if(i - coins[index] >= 0) {
values[i] += values[i - coins[index]];
}
}
getValueCnt(index + 1);
}
int main() {
cin >> n >> k;
coins.assign(n, 0);
values.assign(k + 1, 0);
for(int i = 0; i < n; i++) {
cin >> coins[i];
}
values[0] = 1;
getValueCnt(0);
cout << values[k];
return 0;
}
개발 환경 : vscode
지적, 조언, 질문 환영입니다! 댓글 남겨주세요~