프로그래머스 - 타켓 넘버

phoenixKim·2021년 8월 26일
0

중요한 점.

  • 인덱스 처리는 마지막 , 끝까지 도달했을때 증감이 이루어져야 한다.

풀이전략

  1. dfs를 이용해서 함수안에서 + 와 - 를 이용해 인덱스값을 이용해야 겠다고 생각했다.

문제점.. 발생

: 매개변수로 인덱스의 갯수를 증가하고, sum에 누적하는 방식으로 진행하고자함.
그런데 복귀해서 - 값 연산을 해야한다.

문제 발생 코드


-> 문제점이 무엇이냐면... 전위 증감연산을 함으로써 index가 계속 해서 증가한다는 것이다.
1이 다섯번 진행된후 -1 계산을 하기 위해서는 4번째 인덱스로 복귀를 해야하는데, 지금 이코드에서는 복귀를 못한다.
그리고, 이렇게 진행하면 사고적으로 문제가 잇다.
index값이 3번째 인덱스에 있고, sum값이 4번째에 잇으므로
나름 생각하기에는 0번째 인덱스값이 계산이 안되어지고 바로 1번째 인덱스 부터 계산되어질수 잇다 생각할 수 있다.

  • 이렇게 변경할 수 있다.
    증감연산자를 사용하지 않고, 인덱스 + 1 식으로 사용하면 복귀할 때
    index가 누적되지 않는 값이므로

  • sum과 인덱스가 같이 가므로, 더 안전하게 하고 싶다면
    sum값을 먼저 계산하고, 인덱스 값을 증가하는 방식으로 할 수 있다.
    이렇게

소스코드

#include <string>
#include <vector>

using namespace std;

void dfs(int& target, int &result , int sum, vector<int>&v, int index)
{
    if(v.size() == index)
    {
        if(sum == target)
        {
            result++;
        }
        return;
    }
    
    dfs(target, result,  sum + v[index], v, index + 1);
    dfs(target, result, sum - v[index], v, index + 1);
    
}

//void dfs(int& target, int &result ,int index, int sum, vector<int>&v)
//{
//    if(v.size() == index)
//    {
//        if(sum == target)
//        {
//            result++;
//        }
//        return;
//    }
//    
//    dfs(target, result, index + 1, sum + v[index],  v);
//    dfs(target, result, index + 1,sum - v[index], v);
//    
//}


int solution(vector<int> numbers, int target) {
    int answer = 0;
    
    //dfs(target, answer,  0,0, numbers);
    dfs(target, answer,  0,numbers, 0 );
    
    return answer;
}
profile
🔥🔥🔥

0개의 댓글

관련 채용 정보