flow-vector
Published 2023. 6. 20. 13:33
알고리즘 - Prefix Sum Computer Science/DSA

Prefix Sum

  • 배열에서 i 번째 까지의 값의 합을 가지고 있는 새로운 배열
    • prefix sum 배열을 만드는 것을 pre-processing이라고 볼 수 있고 main 로직에서 시간 복잡도를 줄여주는 역할을 한다.
  • i ~ j 까지 합을 O(1)에 구할 수 있음
prefix[j] - prefix[i - 1]
// 0이하로 out of bound되는 것을 막고 싶다면
prefix[j] - prefix[i] + nums[i]
  • prefix sum 만들기
    • prefix sum이 없다면 query를 수행하는데 O(n) 만큼이 들고 query의 갯수가 m개라면 총 O(n*m)
    • prefix sum을 사용함으로서 O(n + m)으로 시간복잡도를 낮출 수 있음.(O(n) 만큼의 공간을 추가 사용)
vector<bool> answerQueries(vector<int>& nums, vector<vector<int>>& queries, int limit) {
    vector<int> prefix = {nums[0]};
    for (int i = 1; i < nums.size(); i++) {
        prefix.push_back(prefix.back() + nums[i]);
    }
    
    vector<bool> ans;
    for (vector<int>& query: queries) {
        int x = query[0], y = query[1];
        int curr = prefix[y] - prefix[x] + nums[x];
        ans.push_back(curr < limit);
    }
    
    return ans;
}

'Computer Science > DSA' 카테고리의 다른 글

알고리즘 - Sliding Window  (0) 2023.06.20
profile

flow-vector

@flow-vector

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!