단순 재귀를 이용해서 풀었습니다. 쉽게 생각하면 쉽고 어렵게 생각하면 어려운 문제인듯 하네요.
재귀
를 이용하여 각각 두 개의 재귀로 +
,-
넣어주고, 해당 수만큼 넣어줬을 때, target
값과 비교하여 answer
를 증가시켜줬다.#include <string>
#include <vector>
using namespace std;
int answer = 0;
void dfs(vector<int>numbers, int target, int sum, int depth)
{
if(depth==numbers.size())
{
if(sum==target) answer++;
return;
}
dfs(numbers,target, sum+numbers[depth], depth+1);
dfs(numbers,target, sum-numbers[depth], depth+1);
}
int solution(vector<int> numbers, int target) {
dfs(numbers,target, 0,0);
return answer;
}