
😎풀이
- 해시맵을 사용하여 누적합 계산
- 현재 누적합을
k로 나눈 나머지값을 key로, 현재 인덱스를 value로 저장
- 이전 동일한 나머지 값이 나온적이 있다면,
k의 배수 부분배열이 이미 등장했음을 의미함
- 현재 인덱스 - 이전 인덱스의 길이가 2 이상이라면,
true 반환
- 해당 조건이 등장하지 않았다면,
false 반환
function checkSubarraySum(nums: number[], k: number): boolean {
const map = new Map<number, number>()
let prefixSum = 0
map.set(0, -1)
for(let i = 0; i < nums.length; i++) {
prefixSum += nums[i]
const remain = prefixSum % k
if(!map.has(remain)) {
map.set(remain, i)
continue
}
const prevIdx = map.get(remain)
if(i - prevIdx < 2) continue
return true
}
return false
};