알고리즘 문제 해결/프로그래머스

[DFS] 프로그래머스 타겟 넘버 (C++, Python 3)

jmkimmessi 2022. 4. 7. 16:05
반응형

https://programmers.co.kr/learn/courses/30/lessons/43165

 

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

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

programmers.co.kr

 

문제 해결 알고리즘

 

전형적인 dfs 문제 

 

소스 코드

 

C++

#include <string>
#include <vector>

using namespace std;

int answer = 0;

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

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

 

Python 3  

global total = 0

def solution(numbers, target):
    
    answer = 0
    
    dfs(numbers, target, 0, 0)
    answer = total
    
    return answer

def dfs(v, t, s, i):
    
    if len(v) == i :
        if s == t : total = total+1
        return
    
    dfs(v, t, s+v[i], i+1);
    dfs(v, t, s-v[i], i+1);
반응형