해당 포스팅은 프로그래머스 기능개발 풀이를 다룬다. 문제 링크
코드는 javascript로 작성하였으며 DFS로 풀이하였다.
input으로 사용할 수 있는 숫자가 담긴 numbers와 타겟넘버 target이 주어진다. numbers의 숫자를 적절히 더하고 빼서 타겟 넘버로 만드는 방법의 수를 return하면 된다. numbers 안의 숫자들을 전부 방문해야 하므로 dfs를 이용하자.
초기 depth, sum을 0으로 세팅한다음 dfs 실행한다.
dfs(0,0);
탐색할 노드가 남은 경우(depth !== numbers.length) 이전 노드까지의 합에서 현재 노드 값을 더하고 빼는 두 가지 경우로 dfs 재실행
마지막 노드까지 탐색한 경우(depth === numbers.length) target과 sum을 비교 후 일치한다면 answer += 1
const dfs = (idx, result) => {
if (idx === n) {
if (result === target) {
answer += 1;
}
}
else {
dfs(idx + 1, result + numbers[idx]);
dfs(idx + 1, result - numbers[idx]);
}
}
function solution(numbers, target) {
let n = numbers.length;
let answer = 0;
const dfs = (idx, result) => {
if (idx === n) {
if (result === target) {
answer += 1;
}
}
else {
dfs(idx + 1, result + numbers[idx]);
dfs(idx + 1, result - numbers[idx]);
}
}
dfs(0,0);
return answer;
}