
#include <string>
#include <vector>
using namespace std;
int answer = 0;
int RecurFunc(vector<int> Container, int target, int sum ,int CountForStop)
{
if(CountForStop == Container.size())
{
if(sum == target)
{
answer++;
}
return 1;
}
RecurFunc(Container, target, sum + Container[CountForStop], CountForStop+1);
RecurFunc(Container, target, sum - Container[CountForStop] ,CountForStop+1);
}
int solution(vector<int> numbers, int target) {
int Count = 0;
RecurFunc(numbers, target, 0, Count);
return answer;
}
이렇게 하면 일단 프로그래머스에서 core dump 라고 계속 나온다. 원인을 몰라서 디버깅 해봤는데 비줠 스튜디오에서는 warining이 나오지만 된다.
void RecurFunc(vector<int> Container, int target, int sum ,int CountForStop)
{
if(CountForStop == Container.size())
{
if(sum == target)
{
answer++;
}
return;
}
RecurFunc(Container, target, sum + Container[CountForStop], CountForStop+1);
RecurFunc(Container, target, sum - Container[CountForStop] ,CountForStop+1);
}
void형식으로 좀 더 안전하게 가자.
CountForStop은 1씩 커지고 이게 총 컨테이너 사이즈만큼 되면 종료된다.
그리고 결과물은 2^(CountForStop) <ㅡ 이진트리 구조인거 생각하기
그리고 이 문제 푸는데 못풀었는데 이해하는데 엄청 오래걸렸다.

DFS를 코딩으로 처음 접해봤는데 이해하는데 오래걸렸다.
DFS를 코딩으로 작성할 때, 내가 이해한 구조는
1. 본함수 내에서 - 재귀함수 2번 호출 (양옆으로 가지치기 위해서)
2. 양옆으로 가지치기를 언제까지 할것인가에 대한 조건.
이 문제에서는 함수 내의 4번째 CountForStop이 Container.size와 같은경우로 걸어놨다.(결과물 총 8개 나오게됬음)
3. 그리고 8개의 총결과물중 과연 찾고자 하는것이 무엇인지. (사진에서는 target 1임) **
무언가 결과물을 만들고, 찾을때 2^n구조로 결과물이 생겨나는 것에 대한 접근 방식으로 알아두면 좋을것같다.