간단한 dfs문제이다. 숫자를 골라서 + 또는 - 를 해준 결과값을 넘겨주는 방식으로 접근하면 편하다.
#include <string>
#include <vector>
using namespace std;
int answer, n;
void dfs(int cnt, int res, vector<int> numbers, int target)
{
if(cnt == n)
{// 숫자를 다 골랐다면
if (res == target) answer++;// target 과 값이 같다면
return ;
}
//현재 숫자를 더한값 넘겨주기
dfs(cnt+1, res+numbers[cnt], numbers, target);
//현재 숫자를 뺀값 넘겨주기
dfs(cnt+1, res-numbers[cnt], numbers, target);
}
int solution(vector<int> numbers, int target)
{
n = numbers.size();
dfs(0, 0, numbers, target);
return answer;
}