Computer >> 컴퓨터 >  >> 프로그램 작성 >> JavaScript

JavaScript에서 특정 합계에 도달하는 방법

<시간/>

문제

정수 배열 arr을 첫 번째 인수로, 단일 정수 target을 두 번째 인수로 취하는 JavaScript 함수를 작성해야 합니다.

배열의 각 정수에 대해 함수는 '+' 또는 '-'를 할당할 수 있습니다.

우리 함수는 '+', '-'를 할당하여 배열의 정수 합을 목표 합 target과 같게 만드는 총 방법이 몇 개나 존재하는지 알아내야 합니다.

예를 들어, 함수에 대한 입력이 -

인 경우
const arr = [1, 1, 1, 1, 1];
const target = 3;

그러면 출력은 다음과 같아야 합니다. -

const output = 5;

출력 설명:

왜냐하면 5가지 방법은 -

-1+1+1+1+1 = 3
+1-1+1+1+1 = 3
+1+1-1+1+1 = 3
+1+1+1-1+1 = 3
+1+1+1+1-1 = 3

예시

이에 대한 코드는 -

const arr = [1, 1, 1, 1, 1];
const target = 3;
const waysToSum = (arr = [], target = 1) => {
   const map = {};
   const find = (arr, target, i) => {
      let val = i + '->' + target;
      if(map[val] !== undefined){
         return map[val];
      };
      if(i === 0){
         if (target === 0 && arr[0] === 0) { return 2 }
         return arr[0] === target || arr[0] === -target ? 1 : 0
      };
      map[val] = find(arr, target + arr[i], i - 1) + find(arr, target - arr[i], i - 1);
      return map[val]
   };
   return find(arr, target, arr.length-1)
};
console.log(waysToSum(arr, target));

출력

콘솔의 출력은 -

5