알고리즘/백준(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

지적, 조언, 질문 환영입니다! 댓글 남겨주세요~