[leetcode]974.Subarray Sums Divisible by K

Mayton·2022년 7월 23일
0

Coding-Test

목록 보기
18/37
post-thumbnail

문제

Given an integer array nums and an integer k, return the number of non-empty subarrays that have a sum divisible by k.

A subarray is a contiguous part of an array.

예시

  • Example 1:

    - Input: nums = [4,5,0,-2,-3,1], k = 5
    - Output: 7
    - Explanation: There are 7 subarrays with a sum divisible by k = 5:

    [4, 5, 0, -2, -3, 1], [5], [5, 0], [5, 0, -2, -3], [0], [0, -2, -3], [-2, -3]

  • Example 2:

    	- Input: nums = [5], k = 9
    	- Output: 0

제한사항

1 <= nums.length <= 3 * 104
-104 <= nums[i] <= 104
2 <= k <= 104

풀이1

var subarraysDivByK = function (A, K) {
  let sums = new Array(A.length + 1).fill(0);
  let res = 0;
  for (let i = 1; i <= A.length; i++) {
    sums[i] = sums[i - 1] + A[i - 1];
  }
  console.log(sums);

  let dp = new Array(K).fill(0);
  dp[0] = 1;
  for (let i = 1; i < sums.length; i++) {
    let mod = ((sums[i] % K) + K) % K;
    
    res = res + dp[mod];
    dp[mod] = dp[mod] + 1;
  }

  return res;
};

합 K를 만들기 위해서는 Sliding Windows 처럼 총 합과 K로 나눈 나머지가 같은 array만큼을 빼면 합이 K의 배수가 되도록 할 수 있다. 그래서 res에 dp[mod]값을 계속해서 더해주며, sums[i]%K의 값이 음수가 나오는것을 방지하기 위해 +K % K를 다시 해준다.

profile
개발 취준생

0개의 댓글