알고리즘/알고리즘 문제풀이

PrefixSum_Leetcode_1248. Count Number of Nice Subarrays [swift]

Downey 2025. 3. 11. 17:02

https://leetcode.com/problems/count-number-of-nice-subarrays/description/

문제접근

nums의 부분집합 중, k개 이상의 odd를 가진 부분집합의 갯수를 반환

nums를 0 과 1로 변환한다. 그리고 PrefixSum을 수행한다.

그러면 sum은 odd의 갯수이다.

정답코드

더보기
class Solution {
    func numberOfSubarrays(_ nums: [Int], _ k: Int) -> Int {
        var nums = nums.map { $0 % 2 }
        var sol = 0
        var map: [Int: Int] = [0: 1]

        func recursive(_ curSum: Int, _ curIdx: Int) {
            guard curIdx < nums.count else { return }
            let newSum = curSum + nums[curIdx]
            sol += map[newSum-k, default: 0]
            map[newSum, default: 0] += 1
            recursive(newSum, curIdx + 1)
            map[newSum]! -= 1
        }

        recursive(0,0)

        return sol
    }
}