문제
https://school.programmers.co.kr/learn/courses/30/lessons/43165
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
풀이
class Solution {
int cnt = 0;
public int solution(int[] numbers, int target) {
int answer = 0;
dfs(numbers, target, 0, 0);
answer = cnt;
return answer;
}
public void dfs(int[] numbers, int target, int depth, int result){
if(depth == numbers.length){
if(target == result){
cnt += 1;
}
return ;
}
int plus = result + numbers[depth];
int minus = result - numbers[depth];
dfs(numbers, target, depth + 1, plus);
dfs(numbers, target, depth + 1, minus);
}
}
풀이
dfs로 풀되, 헷갈렸던 부분은 어떤 것을 노드로 만드느냐에 대한 부분이었다.
덧셈 / 뺄셈한 값에 대해 재귀문을 걸어 타겟에 가까워졌는지를 본다.
'today I learned > algorithm' 카테고리의 다른 글
[해시] 전화번호 목록 (0) | 2023.10.05 |
---|---|
[해시] 폰켄몬 (0) | 2023.10.05 |