본문 바로가기

Algorithm/DP(Dynamic Programing)

(C++) - LeetCode (easy) 303. Range Sum Query - Immutable

반응형

https://leetcode.com/problems/range-sum-query-immutable/description/

 

Range Sum Query - Immutable - LeetCode

Range Sum Query - Immutable - Given an integer array nums, handle multiple queries of the following type: 1. Calculate the sum of the elements of nums between indices left and right inclusive where left <= right. Implement the NumArray class: * NumArray(in

leetcode.com

부분합 문제였습니다.

📕 풀이방법

📔 입력 및 초기화

부분합을 저장할 vector sums를 선언 후 instance 생성시에 nums만큼 resize해 0으로 초기화합니다.

📔 풀이과정

1. 생성자를 구현합니다. nums의 원소들을 순환하면서 nums[0] ~ nums[i] 까지의 합을 sums[i]에 저장합니다.

2. sumRange함수를 구현합니다.

  2-1. left가 0이라면 바로 sums[right]를 반환하면 됩니다.

  2-2. 만약 left가 0이 아니라면 0부터 right까지의 누적합인 sums[right]에서 0부터 left - 1까지의 합인 sums[left - 1]을 빼 반환합니다.


📕 Code

📔 C++

class NumArray {
public:
    vector <int> sums;
    NumArray(vector<int>& nums) {
        sums.resize(nums.size(), 0);
        sums[0] = nums[0];
        for(int i = 1; i < nums.size(); i++) {
            sums[i] = sums[i-1] + nums[i];
        }
    }
    
    int sumRange(int left, int right) {
        if(!left) return sums[right];
        return sums[right] - sums[left - 1];
    }
};

/**
 * Your NumArray object will be instantiated and called as such:
 * NumArray* obj = new NumArray(nums);
 * int param_1 = obj->sumRange(left,right);
 */

*더 나은 내용을 위한 지적, 조언은 언제나 환영합니다.