지나공 : 지식을 나누는 공간

[프로그래머스 - DFS/BFS] 타겟 넘버 - C++ 본문

Algorithm/프로그래머스

[프로그래머스 - DFS/BFS] 타겟 넘버 - C++

해리리_ 2020. 7. 8. 00:29

문제 출처 : https://programmers.co.kr/learn/courses/30/lessons/43165

 

코딩테스트 연습 - 타겟 넘버

n개의 음이 아닌 정수가 있습니다. 이 수를 적절히 더하거나 빼서 타겟 넘버를 만들려고 합니다. 예를 들어 [1, 1, 1, 1, 1]로 숫자 3을 만들려면 다음 다섯 방법을 쓸 수 있습니다. -1+1+1+1+1 = 3 +1-1+1+1+

programmers.co.kr

dfs를 활용해서 풀었습니다. 빼기도 하고 더하기도 하고 이렇게 모든 경우를 다 하기 위해 재귀함수를 사용합니다.

 

#include <string>
#include <vector>

using namespace std;
int ans;

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

int solution(vector<int> numbers, int target) {
    dfs(numbers, target, 0, numbers[0]);
    dfs(numbers, target, 0, -numbers[0]);
    return ans;
}

 

이 코드는 가지치기로 모든 경우를 탐색한다고 생각하면 이해하기 쉽습니다.

 

타겟넘버 코드의 재귀함수 사용 구조

 

728x90
Comments