😎풀이

  1. 해시맵을 사용하여 누적합 계산
  2. 현재 누적합을 k로 나눈 나머지값을 key로, 현재 인덱스를 value로 저장
  3. 이전 동일한 나머지 값이 나온적이 있다면, k의 배수 부분배열이 이미 등장했음을 의미함
  4. 현재 인덱스 - 이전 인덱스의 길이가 2 이상이라면, true 반환
  5. 해당 조건이 등장하지 않았다면, 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
};
profile
내 지식을 공유할 수 있는 대담함

0개의 댓글