[프로그래머스] 타겟 넘버

FeRo 페로·2022년 10월 24일
0

타겟 넘버
트리에 대해서 공부를 했으니 트리에 관련된 문제를 풀어보았다.

이 문제는 주어진 배열 요소를 하나씩 더하거나 빼서 최종적으로 target과 같은 값이 되는 경우의 수를 찾는 문제이다. '경우의 수'에서 알 수 있다시피 DFS를 통해서 해결을 할 수 있는 문제다. DFS를 구현하는 방법은 스택이 있고, 이번에는 재귀를 사용했다.

시간 복잡도는 leaf node의 갯수 만큼이기 때문에 O(2^배열의 길이)이다. 아래는 배열[1, 2]이 주어질 때 해당 노드에 대해 문제와 같은 조건으로 트리를 그려보았다.

배열의 길이가 2기 때문에 leaf node가 2의 제곱인 것을 알 수 있다.

function solution(numbers, target) {
  let answer = 0;
  const length = numbers.length;

  const DFS = (count, sum) => {
    if (count === length) {
      if (sum === target) answer++;
      return;
    }
    DFS(count + 1, sum + numbers[count]);
    DFS(count + 1, sum - numbers[count]);
  };

  DFS(0,0);
  return answer;
}

함수 DFS를 재귀적으로 호출하면서 다음 요소를 더하고 빼면서 호출한다. 배열의 길이 만큼 호출이 됐고 그 합의 결과가 target과 동일하다면 카운트를 해준다.

profile
주먹펴고 일어서서 코딩해

0개의 댓글