Algorithm πŸ§‘πŸ»‍πŸ’»/ν”„λ‘œκ·Έλž˜λ¨ΈμŠ€(Programmers)

[c++] ν”„λ‘œκ·Έλž˜λ¨ΈμŠ€ - νƒ€κ²Ÿ λ„˜λ²„( Level 2)

dkswnkk 2021. 10. 23. 22:44

문제

 

μ½”λ”©ν…ŒμŠ€νŠΈ μ—°μŠ΅ - νƒ€κ²Ÿ λ„˜λ²„

n개의 음이 μ•„λ‹Œ μ •μˆ˜λ“€μ΄ μžˆμŠ΅λ‹ˆλ‹€. 이 μ •μˆ˜λ“€μ„ μˆœμ„œλ₯Ό λ°”κΎΈμ§€ μ•Šκ³  적절히 λ”ν•˜κ±°λ‚˜ λΉΌμ„œ νƒ€κ²Ÿ λ„˜λ²„λ₯Ό λ§Œλ“€λ €κ³  ν•©λ‹ˆλ‹€. 예λ₯Ό λ“€μ–΄ [1, 1, 1, 1, 1]둜 숫자 3을 λ§Œλ“€λ €λ©΄ λ‹€μŒ λ‹€μ„― 방법을 μ“Έ 수

programmers.co.kr

 

μ½”λ“œ

#include <string>
#include <vector>

using namespace std;

int sum,targets,answer;

void dfs(const vector<int>&numbers, int index, int sum){
    if(index<numbers.size()){
        dfs(numbers,index+1,sum+numbers[index]);
        dfs(numbers,index+1,sum-numbers[index]);
    }
    else{
        if(targets==sum)answer++;
        return;
    }
}

int solution(vector<int> numbers, int target) {

    targets=target;
    dfs(numbers,0,sum);

    return answer;
}