https://school.programmers.co.kr/learn/courses/30/lessons/43165?language=cpp
1. 의사코드
최악 : 2^20 == 1048576 < 1억 이므로
완탐가능하다.
모든넘버에대해 -, + 경우를 가정하고
dfs로 완탐한다.
2. 전체코드
#include <string>
#include <vector>
using namespace std;
int answer;
void dfs(vector<int>& numbers, int& target, int idx, int result){
if(idx==numbers.size()){
if(result==target){
answer++;
}
return;
}
dfs(numbers,target,idx+1,result-numbers[idx]);
dfs(numbers,target,idx+1,result+numbers[idx]);
}
int solution(vector<int> numbers, int target) {
dfs(numbers,target,0,0);
return answer;
}
'Algorithm > dfs' 카테고리의 다른 글
프로그래머스 미로탈출명령어 c++ // dfs 가지치기 방법, dfs중복방문 방법, dfs 시간복잡도 계산방법 (0) | 2023.12.02 |
---|---|
백준 1759 암호만들기 c++ // 포함불포함 완탐 dfs, 순열시간초과 나는경우 해결 (0) | 2023.11.26 |
프로그래머스 단어변환 c++ dfs ,백트래킹 // dfs 조건있는경우 해결방법 (0) | 2023.10.18 |
프로그래머스 전력망을 둘로 나누기 c++ // int dfs 자식수세기 (0) | 2023.10.02 |
프로그래머스 네트워크 c++ // 인접행렬 dfs (0) | 2023.09.13 |