
예전에 똑같은 문제를 풀었었는데, dfs로 나올 수 있는 연산자의 경우를 모두 구한 다음 숫자를 하나씩 넣어서 구하는 약간 무식한 방법(?)을 사용했습니다. 그때 방법이 너무 비효율적이라 생각해서 다른 분들의 풀이법을 보고 공부를 했습니다.
예전에 제가 풀었던 방법은 ++++, +++-, ++-+...이런식으로 dfs로 모든 경우의 수를 구했고 이 값을 사용하여 number의 인덱스 하나씩 비교해서 값을 더했었습니다. 이런 방법보다는 재귀를 돌리면서 연산이 적용된 현재의 값을 저장하는 방법이 더 직관적이고 괜찮은 방법인 것 같습니다.
#include <string>
#include <vector>
using namespace std;
vector<int> v;
int t;
int count = 0;
void dfs(int sum,int depth){
if(depth == v.size()){
if(sum == t){
count++;
}
return;
}
dfs(sum+v[depth],depth+1);
dfs(sum-v[depth],depth+1);
}
int solution(vector<int> numbers, int target) {
v = numbers;
t = target;
dfs(v[0],1);
dfs(-v[0],1);
return count;
}
'알고리즘 문제' 카테고리의 다른 글
[알고리즘문제] 프로그래머스 - 다음 큰 숫자 (0) | 2020.01.04 |
---|---|
[알고리즘문제] 프로그래머스 - 카펫 (0) | 2020.01.03 |
[알고리즘문제] 프로그래머스 - 구명보트 (0) | 2019.12.26 |
[알고리즘문제] 프로그래머스 - 더 맵게 (0) | 2019.12.23 |
[알고리즘문제] 프로그래머스 - 조이스틱 (0) | 2019.12.22 |