본문 바로가기

ALGORITHM_PRACTICE

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

사이트 주소

 

코딩테스트 연습 - 타겟 넘버 | 프로그래머스

n개의 음이 아닌 정수가 있습니다. 이 수를 적절히 더하거나 빼서 타겟 넘버를 만들려고 합니다. 예를 들어 [1, 1, 1, 1, 1]로 숫자 3을 만들려면 다음 다섯 방법을 쓸 수 있습니다. -1+1+1+1+1 = 3 +1-1+1+1+1 = 3 +1+1-1+1+1 = 3 +1+1+1-1+1 = 3 +1+1+1+1-1 = 3 사용할 수 있는 숫자가 담긴 배열 numbers, 타겟 넘버 target이 매개변수로 주어질 때 숫자를 적절히 더하고 빼서 타겟 넘

programmers.co.kr

 

문제를 잘못이해해서 어렵게 풀었던 문제이다. 답을 보고 "엥? 왜 이렇게 풀지?"하다가 문제를 다시 읽어보고나서 깨닫고 다시 푸니 금방 풀 수 있는 문제였다. 숫자가 주어졌을 때 그 사이에 [+, -] 만 넣어 그 수식의 합이 target과 같으면 카운트를 하면 된다.

백준의 N과 M을 생각하면서 풀었더니 오히려 독이되었던 케이스다. 문제를 정확히 파악하자

 

#include <string>
#include <vector>
#include <cstring>
using namespace std;

int result = 0;

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

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

'ALGORITHM_PRACTICE' 카테고리의 다른 글

백준 2565번: 전깃줄  (0) 2019.09.08
[프로그래머스] 베스트앨범  (0) 2019.09.06
백준 14890번: 경사로  (0) 2019.08.08
백준 12100번: 2048 (Easy)  (0) 2019.08.06
백준 3190번: 뱀  (0) 2019.07.15