본문 바로가기
Programming Solve/프로그래머스

프로그래머스 - 타겟 넘버 / C++

by msm1029 2022. 2. 13.
반응형

문제 링크 : https://programmers.co.kr/learn/courses/30/lessons/43165

 

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

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

programmers.co.kr

 

 

문제 풀이

주어진 숫자를 더하고 빼서 target이 될 수 있는지 찾는 문제이다. numbers 배열의 크기가 크지 않으므로 DFS를 통해 모든 더하기, 빼기의 경우의 수를 체크해보면 된다.

 

소스 코드

#include <bits/stdc++.h>
using namespace std;

int answer = 0;

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

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

 

DFS를 이용한 풀이가 가장 깔끔하긴 하지만, 순열 또는 비트마스크를 이용하여 풀 수도 있다.

반응형