LeetCode의 Running Sum of 1d Array 문제다.
[1, 2, 3, 4] 같은 배열이 주어지면 첫 번째 요소까지의 합, 두 번째 요소까지의 합, 세 번째 요소까지의 합, 네 번째 요소까지의 합을 구해서 반환하는 문제다. 즉 [1, 1+2, 1+2+3, 1+2+3+4]를 계산하는 것인데 단순히 생각하면 그냥 매 요소마다 반복문으로 현재 요소까지의 합을 구해서 추가해주는 방식으로 리스트를 구성할 수 있을 것 같은데 아무리 생각해도 좋은 성능이 안 나올 것 같아서 이전에 계산한 결과를 사전에 저장해 두고 매 요소마다 이전 요소까지의 합을 꺼내서 현재 값과 더하는 방식으로 구현하였다.
import collections
class Solution:
def runningSum(self, nums: List[int]) -> List[int]:
result = []
mid_sum = collections.defaultdict(int)
for index, value in enumerate(nums):
current_sum = mid_sum[index-1] + value
result.append(current_sum)
mid_sum.update({index:current_sum})
return result
기본값을 제공하기 때문에 유용하게 쓰이는 defaultdict 클래스를 이용했다. 이때 defaultdict 객체의 get 메서드로 참조하면 기본값이 안 나오지만 mid_sum[index-1]처럼 인덱싱을 사용하면 기본값이 나오는 걸 알 수 있었다. 앞으로는 굳이 update 메서드나 이런 걸 사용하지 않고 인덱싱을 적극 활용해야겠다.
확실히 계산했던 부분을 반복할 필요가 없기 때문에 상위 96%라는 좋은 성능을 얻을 수 있었다.
'알고리즘 > LeetCode' 카테고리의 다른 글
Merge Two Sorted Lists (Linked List) (0) | 2021.03.09 |
---|---|
Palindrome Linked List (Linked List) (0) | 2021.03.09 |
Number of Students Unable to Eat Lunch (deque) (0) | 2021.02.24 |
Array Partition I (Pythonic way) (0) | 2021.02.24 |
3Sum (Two Pointers) (0) | 2021.02.24 |