본문 바로가기

알고리즘/LeetCode

Running Sum of 1d Array (defaultdict)

LeetCode의 Running Sum of 1d Array 문제다.

 

Running Sum of 1d Array - LeetCode

Level up your coding skills and quickly land a job. This is the best place to expand your knowledge and get prepared for your next interview.

leetcode.com

[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