반갑습니다!

[프로그래머스] 타겟 넘버 본문

알고리즘 문제 풀이

[프로그래머스] 타겟 넘버

김덜덜이 2020. 5. 7. 15:25
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr

풀이

기초적인 DFS 문제이다. DFS를 하면서 모든 숫자를 다 탐색했을 때 target과 같은 결과를 가지고 있는지 확인하면 된다.

코드

C++
#include <string>
#include <vector>
using namespace std;

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

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


Java

class Solution {
    int n, ans;

    public void dfs(int[] numbers, int target, int idx, int sum) {
        if (idx == n) {
            if (sum == target) ans++;
            return;
        }
        dfs(numbers, target, idx + 1, sum + numbers[idx]);
        dfs(numbers, target, idx + 1, sum - numbers[idx]);
    }

    public int solution(int[] numbers, int target) {
        n = numbers.length;
        int answer = 0;
        dfs(numbers, target, 0, 0);
        answer = ans;
        return answer;
    }
}