프로그래머스 코딩테스트 연습문제 깊이/너비 우선 탐색(DFS/BFS) 타겟 넘버 풀이입니다.
저는 재귀함수로 DFS를 구현해서 풀었습니다. 제 풀이가 완벽한 정답은 아닐 수 있으니 참고만 해주세요.
#include <string>
#include <vector>
using namespace std;
int answer = 0;
void DFS(vector<int> v, int size, int target, int depth, int *flag) {
int s = 0;
if(depth == size) {
for (int i = 0; i < size; i++) {
if (flag[i] == 1) s += v[i];
else if(flag[i] == 0) s -= v[i];
}
if(s == target) answer++;
return;
}
flag[depth] = 1; DFS(v, size, target, depth + 1, flag);
flag[depth] = 0; DFS(v, size, target, depth + 1, flag);
}
int solution(vector<int> numbers, int target) {
int *flag = new int[numbers.size()]();
DFS(numbers, numbers.size(), target, 0, flag);
return answer;
}
'C++' 카테고리의 다른 글
[C++] 프로그래머스 카펫 문제풀이 코드 (완전탐색) (0) | 2020.04.16 |
---|---|
[C++] string to int 변환 / int to string 변환 /stoi(), to_string() (0) | 2020.04.14 |
[C++] 재귀함수로 순열 구현하기 코드 (0) | 2020.04.14 |
[C++] 프로그래머스 'K번째 수' 문제 풀이 (0) | 2020.04.08 |
[C++] 프로그래머스 체육복 문제 (vector / iterator/ erase ) (0) | 2020.04.08 |