LeetCode/NeetCode

[Prefix Sums] 303. Range Sum Query - Immutable

hyunkookim 2025. 4. 5. 06:17

303. Range Sum Query - Immutable

 

class NumArray:

    def __init__(self, nums: List[int]):
        self.nums = nums
        self.area = [0]*len(nums)
        self.area[0] = nums[0]  # 첫 원소는 그대로 할당
        for i in range(1, len(nums)):
            self.area[i] = self.area[i - 1] + nums[i]  # 누적합 계산

    def sumRange(self, left: int, right: int) -> int:
        if left == 0:
            return self.area[right]
        else:
            return self.area[right] - self.area[left - 1]


        return res


# Your NumArray object will be instantiated and called as such:
# obj = NumArray(nums)
# param_1 = obj.sumRange(left,right)

 

정리된 코드

class NumArray:

    def __init__(self, nums: List[int]):
        self.nums = nums                     # 원본 배열 저장
        self.prefixSum = []                  # 누적합을 저장할 배열
        total = 0                            # 누적합 계산용 임시 변수
        for n in nums:
            total += n                       # 지금까지의 합을 누적하고
            self.prefixSum.append(total)     # 누적합 배열에 추가

    def sumRange(self, left: int, right: int) -> int:
        preR = self.prefixSum[right]                         # 0부터 right까지의 누적합
        preL = self.prefixSum[left-1] if left > 0 else 0     # 0부터 left-1까지의 누적합 (left가 0이면 0으로 처리)
        return preR - preL                                   # right까지 합 - left-1까지 합 = [left, right] 구간합