- Today
- Total
작심삼일
[LeetCode] 985 | Sum of Even Numbers After Queries | Python 본문
문제 링크: 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
'스터디 > 코테' 카테고리의 다른 글
[LeetCode] 1680 | Concatenation of Consecutive Binary Numbers | Python (0) | 2022.09.23 |
---|---|
[LeetCode] 557 | Reverse Words in a String III | Python (0) | 2022.09.22 |
[LeetCode] 718 | Maximum Length of Repeated Subarray | Python (0) | 2022.09.20 |
[LeetCode] 609 | Find Duplicate File in System | Python (0) | 2022.09.19 |
[LeetCode] 2007 | Find Original Array From Doubled Array | Python (0) | 2022.09.15 |