반응형
DFS - 타겟 넘버
문제 출저 - 프로그래머스 https://programmers.co.kr/learn/courses/30/lessons/43165
풀이 생각
1. 재귀로 첫번째부터 마지막까지의 합을 차근차근 넘겨주자.
=> sum ± numbers[index]
2. 덧셈과 뺄셈이 있어야함
=> 덧셈 재귀 끝난 후 뺄셈 재귀 들어가기
3. 기저사례는?
=> 마지막 index + 1 일때. numbers.size()와 일치할 때.
=> 이 때 sum이 targer과 같으면 1 리턴, 다르면 0 리턴
my code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
|
#include <string>
#include <vector>
using namespace std;
int dfs(vector<int>& numbers, int tar, int here, int sum){
int answer = 0;
size_t size = numbers.size();
if(here == size){
if(sum == tar){
return 1;
}
return 0;
}
int there = here + 1;
answer += dfs(numbers, tar, there, sum+numbers[here]);
answer += dfs(numbers, tar, there, sum-numbers[here]);
return answer;
}
int solution(vector<int> numbers, int target) {
return dfs(numbers, target, 0, 0);
}
|
cs |
feedback
● dfs 함수 방문 = 노드에 방문 으로 생각하고 문제 접근했었음. 위 코드처럼 기저사례 사용하는 것은 함수의 목적에 맞지 않는다고 생각했었음.
=> 그래서 vector<bool> visited를 통해 제어하려 했으나 더 복잡해짐.
=> 인접행렬, 인접리스트에서는 visited 사용이 깔끔. 배열에서는 기저사례하는 것이 깔끔한 듯.
반응형
'IT > Algorithm' 카테고리의 다른 글
재귀 - 2진수 변환 (0) | 2020.09.28 |
---|---|
완전 탐색 - 소수 찾기 (0) | 2020.09.03 |
무식하게 풀기(완전 탐색) - 모의고사 (0) | 2020.08.31 |
무식하게 풀기(완전 탐색) - 게임판 덮기 (0) | 2020.08.30 |
무식하게 풀기(완전 탐색) - 소풍 (0) | 2020.08.30 |
댓글