Algorithm/problems
Leetcode 53. Maximum Subarray
수밈
2024. 8. 6. 18:03
## 문제이해
전체 배열중에 부분 배열이 최댓값인 배열을 찾고, 최댓값을 출력하는 문제 였다.
## 생각해 본 방법
처음에는 left, right 포인터를 사용해서 푸는 문제인가 했는데, 전형적인 dp 문제였다.
예시에 -2, 1, -3, 4, -1, 2, 1, -5, 4 가 있다면
dp 배열을 만들어주고 현재 인덱스에 최대 합을 넣어주면된다
idx = 0 일때는 -2 만 있으므로, 최대값을 넣어주고
그 이후에는 dp[i-1]의 최댓값과 현재값을 더한게 큰지, 아니면 현재 값을 넣는게 큰지 비교해서 넣으면 된다.
## Try 1. 성공
class Solution:
def maxSubArray(self, nums: List[int]) -> int:
# dp 는 현재 인덱스에서 가장 최대의 값을 넣는다.
dp = [0] * len(nums)
for i in range(len(nums)):
if i == 0:
# 0 의 값 초기화
dp[i] = nums[i]
else:
# 이전값과 더해서 최댓값이 나오면 이전값+현재값을, 아니면 현재값을 넣는다.
dp[i] = max(dp[i-1]+nums[i], nums[i])
return max(dp)