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

JavaScript에서 n으로 나눌 수 있는 합계

<시간/>

문제

숫자 배열 arr을 첫 번째 인수로, 숫자 num을 두 번째 인수로 취하는 JavaScript 함수를 작성해야 합니다. 우리의 함수는 합이 num으로 나누어지는 (연속되고 비어 있지 않은) 하위 배열의 수를 반환해야 합니다.

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

인 경우
const arr = [4, 5, 0, -2, -3, 1];
const num = 5;

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

const output = 7;

출력 설명

합이 5 −

인 7개의 하위 배열이 있습니다.
[4, 5, 0, -2, -3, 1], [5], [5, 0], [5, 0, -2, -3], [0], [0, -2, -3], [-2, -3]

예시

이에 대한 코드는 -

const arr = [4, 5, 0, -2, -3, 1];
const num = 5;
const divisibleSum = (arr = [], num = 1) => {
   const map = {};
   let sum = 0;
   for (let i = 0; i < arr.length; i++) {
      sum += arr[i];
      const key = ((sum % num) + num) % num;
      map[key] = map[key]+1||1;
   };
   let s = 0;
   for (let i = 0; i < num; i++) {
      if (map[i] > 1) {
         s += (map[i] * (map[i] - 1)) / 2;
      }
   }
   return s + (map[0]||0);
};
console.log(divisibleSum(arr, num));

출력

콘솔의 출력은 -

7