문제 설명만을 보고선 어떻게 풀어야할지 감이 잘 안왔는데 다른 사람의 풀이 중 DFS를 활용하여 풀면 된다는 문제 설명을 보고 DFS 문제 연습을 하는 겸 주석을 넣으면서 풀어 보았다.

answer은 전역 변수를 통해 함수에서 값을 추가될때마다 반영되도록 하였다.

 

지금까지 생각해봤을 때 DFS 는 재귀함수로 구현하는 데 이렇게 구현할 알고리즘을 짜는 능력이 필요하다..

#include <string>
#include <vector>

using namespace std;
int answer = 0;

 void dfs_target(vector<int> numbers, int target,int sum,int index){        //dfs=> 재귀함수로 구현, 종료조건 필요
     //종료조건
    if(index==numbers.size()){
        if(sum==target){
            answer++;
        }
        return ;
    }
    //재귀함수
     dfs_target(numbers,target,sum+numbers[index],index+1);             //양수일때
     dfs_target(numbers,target,sum-numbers[index],index+1);             //음수일때
 }

int solution(vector<int> numbers, int target) {
    
    dfs_target(numbers,target,0,0);         //시작값 index,sum 0부터
    return answer;
}

 

 

+ Recent posts