코딩테스트 연습 - 타겟 넘버 | 프로그래머스
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 |