Leetcode Java Subarray Sums Divisible by K
업데이트:
문제
코드
class Solution {
public int subarraysDivByK(int[] nums, int k) {
int result = 0;
int prefix = 0;
int[] count = new int[k];
count[0] = 1;
for (int num : nums) {
prefix = (prefix + (num % k) + k) % k;
result += count[prefix];
count[prefix]++;
}
return result;
}
}
결과
설명
-
연속된 값이 k의 배수가 되는 부분 배열의 수를 구하는 문제이다.
- 문제 풀이에 필요한 변수를 정의한다.
- result는 부분 배열의 수를 계산할 변수로, 0으로 초기화한다.
- prefix는 값들을 더한 후 k로 나눈 나머지를 저장할 변수로, 0으로 초기화한다.
- count는 k로 나눈 나머지 값의 갯수를 저장할 변수로, k 크기의 정수 배열로 초기화하고 첫 값에 1을 넣어준다.
- nums의 모든 값을 순차적으로 num에 넣어 아래를 반복한다.
- prefix에 prefix와 num을 k로 나눈 나머지 값과 더한 후 k로 나눈 나머지 값을 넣어준다.
- result에 count의 prefix번째 값에 대한 갯수를 꺼내 더해주고, count의 prefix번째 값을 증가시킨다.
- 반복이 완료되면 부분 배열의 수가 저장된 result를 주어진 문제의 결과로 반환한다.
소스
Sample Code는 여기에서 확인 가능합니다.
댓글남기기