๐ ์ฃผ์ด์ง ๋ฐฐ์ด์์ '๋ถ๋ถ์ฐ์์์ดํฉ'์ ์ต๋๊ฐ์ ๊ตฌํ๋ ์๊ณ ๋ฆฌ์ฆ์ด๋ค. DP๋ก๋ ๊ตฌํ ์ ์๊ณ , well-known Kadane's Algorithm์ ํ์ฉํด์๋ ๋งค์ฐ ๊ฐ๋จํ ํด๊ฒฐํ ์ ์๋ค.
๐ ๊ฐ element traversingํ ๋๋ง๋ค max() ๋ ๋ฒ ์ฌ์ฉ. max_till_now๋ก ์ต์ข ์ต๋๊ฐ updateํ๊ณ , cur_max๋ ํ์ฌ์์น์ ์์ only & ํ์ฌ์์น์ ์์ ํฌํจ ๊ทธ ์ ์ cur_max ํฉ ๋ ๊ฐ์ค ์ต๋๊ฐ update. ์ฆ cur_max๋ก ๊ฐ ์์๋ฅผ ํฌํจํ ๋ถ๋ถ์ฐ์์์ดํฉ ์ต๋๊ฐ์ ๊ณ์ ๊ตฌํด๋๊ฐ๋ dp ๋ฐฉ์์ด๋ ๋ง์ฐฌ๊ฐ์ง. ๋ค๋ง, dp๋ ์ต์ข ์ ์ผ๋ก max() ํ ๋ฒ ์ฌ์ฉ์ด์ง๋ง, Kadane's algorithm์์๋ max()๋ฅผ ๊ทธ ๋ ๊ทธ ๋ updateํ๋ ๋ฐฉ์๋ง ์ฐจ์ด์ . ํต์ฌ์ 'ํ์ฌ ์์น์ ์์๋ ๋ฌด์กฐ๊ฑด ๋ถ๋ถํฉ์ ํฌํจ๋ ์ํ์์ ๋ ์์ ๋ง ๊ณ ๋ คํ๋๊ฒ ๋ ํฐ ์ง, ์๋๋ฉด ์์ ์ต๋๊ฐ์ ๋ ์์ ์ ๋ํ ๊ฒฐ๊ณผ๊ฐ ํฐ ์ง'๋ฅผ ํ์ธ. ์ฒซ cur_max๋ 0์ผ๋ก ์ค์ . max_till_now๋ ๋ฌธ์ ์์ ์ฃผ์ด์ง ๋ฒ์์ ๋ฐ๋ผ ์ ์ฒด array์ ์ต์๊ฐ์ผ๋ก ์ค์
๐ BOJ 1912 <์ฐ์ํฉ> ์ค๋ฒ2 & LeetCode 53 <Maximum Subarray> ๋ฌธ์ ์ฐธ๊ณ .
๐ python
import math
#list nums
def maxSubArray(self, nums: List[int]) -> int:
ans,curmax=-math.inf,0
for i in range(len(nums)):
curmax=max(curmax+nums[i],nums[i])
ans=max(ans,curmax)
return ans
'Computer Science > Algorithms' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
๐งฟ Dijkstra's (Shortest Path) Algorithm (1) | 2024.01.14 |
---|---|
๐LIS(Longest Increasing Subsequence) O(n^2)/O(nlogn) (0) | 2024.01.06 |
๐ฌ Parametric Search (1) | 2023.12.31 |
2๏ธโฃBipartite Graph (1) | 2023.12.21 |
๐ Optimal Page Replacement Algorithm (1) | 2023.10.18 |
๋๊ธ