프로그래머스 타겟넘버 - js

fgStudy·2022년 6월 5일
0

코딩테스트

목록 보기
54/69
post-thumbnail

해당 포스팅은 프로그래머스 기능개발 풀이를 다룬다. 문제 링크
코드는 javascript로 작성하였으며 DFS로 풀이하였다.


풀이

input으로 사용할 수 있는 숫자가 담긴 numbers와 타겟넘버 target이 주어진다. numbers의 숫자를 적절히 더하고 빼서 타겟 넘버로 만드는 방법의 수를 return하면 된다. numbers 안의 숫자들을 전부 방문해야 하므로 dfs를 이용하자.


로직 - 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;
}
profile
지식은 누가 origin인지 중요하지 않다.

0개의 댓글