본문 바로가기
IT/Algorithm

DFS - 타겟 넘버

by 신인용 2020. 9. 1.
반응형

 

DFS - 타겟 넘버

 

 

문제 출저 - 프로그래머스 https://programmers.co.kr/learn/courses/30/lessons/43165

 

 

 

풀이 생각

1. 재귀로 첫번째부터 마지막까지의 합을 차근차근 넘겨주자.

 => sum ± numbers[index]

2. 덧셈과 뺄셈이 있어야함

 => 덧셈 재귀 끝난 후 뺄셈 재귀 들어가기

3. 기저사례는?

 => 마지막 index + 1 일때. numbers.size()와 일치할 때.

 => 이 때 sum이 targer과 같으면 1 리턴, 다르면 0 리턴

 

 

 

 

my code

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
#include <string>
#include <vector>
 
using namespace std;
 
int dfs(vector<int>& numbers, int tar, int here, int sum){
    int answer = 0;
    size_t size = numbers.size();
    
    if(here == size){
        if(sum == tar){
            return 1;
        }
        return 0;
    }
    
    int there = here + 1;
    answer += dfs(numbers, tar, there, sum+numbers[here]);
    answer += dfs(numbers, tar, there, sum-numbers[here]);
    return answer;
}
 
int solution(vector<int> numbers, int target) {
    return dfs(numbers, target, 00);
}
cs

 

 

 

feedback

● dfs 함수 방문 = 노드에 방문 으로 생각하고 문제 접근했었음. 위 코드처럼 기저사례 사용하는 것은 함수의 목적에 맞지 않는다고 생각했었음.

 => 그래서 vector<bool> visited를 통해 제어하려 했으나 더 복잡해짐.

 => 인접행렬, 인접리스트에서는 visited 사용이 깔끔. 배열에서는 기저사례하는 것이 깔끔한 듯.

 

 

 

 

반응형

댓글