작심삼일

[LeetCode] 985 | Sum of Even Numbers After Queries | Python 본문

스터디/코테

[LeetCode] 985 | Sum of Even Numbers After Queries | Python

yun_s 2022. 9. 21. 09:26
728x90
반응형

문제 링크: https://leetcode.com/problems/sum-of-even-numbers-after-queries/


문제

You are given an integer array nums and an array queries where queries[i] = $[val_i, index_i].$

For each query i, first, apply $nums[index_i] = nums[index_i]+val_i$, then print the sum of the even values of nums.

Return an integer array answer where answer[i] is the answer to the $i^{th}$ query.


조건

  • 1 <= nums.length <= $10^4$
  • $-10^4$ <= nums[i] <= $10^4$
  • 1 <= queries.length <= $10^4$
  • $-10^4$ <= $val_i$ <= $10^4$
  • 0 <= $index_i$ < nums.length

내 풀이

먼저 nums의 짝수들의 합을 구해서 cur_sum에 저장해둔다.

queries를 앞에서부터 차례로 보면서 각 query의 값을 (val, idx)라 하자.

nums[idx]+val의 값이 짝수일 때, nums[idx]의 값이 짝수라면 이미 nums[idx]의 값은 cur_sum에서 사용되었기 때문에 val만 더해주면 된다.

만약 nums[idx]의 값이 짝수라면 cur_sum에 nums[idx]와 val 모두 더해준다.

nums[idx]+val의 값이 홀수일 때, nums[idx]의 값이 짝수라면 nums[idx]의 값을 cur_sum에서 빼준다.

왜냐하면 짝수였던 값이 홀수로 바뀌었기 때문이다.

 

그 후에 nums[idx]는 바뀐 값을 유지해야하므로 val을 더해주고, 정답으로 리턴할 ans에 cur_sum을 추가하면 된다.


코드

class Solution:
    def sumEvenAfterQueries(self, nums: List[int], queries: List[List[int]]) -> List[int]:
        cur_sum = 0
        ans = []
        
        for num in nums:
            if num%2 == 0:
                cur_sum += num
        
        for val, idx in queries:
            if (nums[idx]+val) % 2 == 0:
                if nums[idx] % 2 == 0:
                    cur_sum += val
                else:
                    cur_sum += (nums[idx] + val)
            else:
                if nums[idx] % 2 == 0:
                    cur_sum -= nums[idx]
                
            nums[idx] += val
            ans.append(cur_sum)
        
        return ans
728x90
반응형
Comments