파비의 매일매일 공부기록

2023.01.18 Today's Challenge 본문

Problem Solving/LeetCode

2023.01.18 Today's Challenge

fabichoi 2023. 1. 18. 23:45

https://leetcode.com/problems/maximum-sum-circular-subarray/

 

Maximum Sum Circular Subarray - LeetCode

Maximum Sum Circular Subarray - Given a circular integer array nums of length n, return the maximum possible sum of a non-empty subarray of nums. A circular array means the end of the array connects to the beginning of the array. Formally, the next element

leetcode.com

일단 아이디어는 다음과 같다.
1. index 1부터 n-1까지 진행하면서 누적합을 구해 놓는다. 그러면서 max 값도 같이 저장해놓음.
2. 누적합 리스트를 다시 index 1부터 n-1까지 진행하면서 index 의 값을 빼면서 현재 max랑 비교해서 업데이트 한다.

틀렸다. 한 30분 트러블 슈팅 했는데 안되서 그냥 솔루션 보고 품.

결론은 DP로 푸는거였음 =_=

class Solution:
    def maxSubarraySumCircular(self, nums: List[int]) -> int:
        s = sum(nums)
        dp = [[0,0] for _ in range(len(nums))]
        dp[0][0] = nums[0]
        res = nums[0]
        for i in range(1, len(nums)):
            dp[i][0] = max(dp[i-1][0] + nums[i], nums[i])
            dp[i][1] = min(dp[i-1][1] + nums[i], nums[i])
            res = max(res, dp[i][0], s - dp[i][1])
        return res
반응형

'Problem Solving > LeetCode' 카테고리의 다른 글

2023.01.20 Today's Challenge  (0) 2023.01.20
2023.01.19 Today's Challenge  (0) 2023.01.19
2023.01.17 Today's Challenge  (0) 2023.01.17
2023.01.16 Today's Challenge  (0) 2023.01.16
Today's Challenge  (0) 2023.01.15
Comments