https://www.acmicpc.net/problem/1912
๐ ๋ฌธ์
n๊ฐ์ ์ ์๋ก ์ด๋ฃจ์ด์ง ์์์ ์์ด์ด ์ฃผ์ด์ง๋ค. ์ฐ๋ฆฌ๋ ์ด ์ค ์ฐ์๋ ๋ช ๊ฐ์ ์๋ฅผ ์ ํํด์ ๊ตฌํ ์ ์๋ ํฉ ์ค ๊ฐ์ฅ ํฐ ํฉ์ ๊ตฌํ๋ ค๊ณ ํ๋ค. ๋จ, ์๋ ํ ๊ฐ ์ด์ ์ ํํด์ผ ํ๋ค.
์๋ฅผ ๋ค์ด์ 10, -4, 3, 1, 5, 6, -35, 12, 21, -1 ์ด๋ผ๋ ์์ด์ด ์ฃผ์ด์ก๋ค๊ณ ํ์. ์ฌ๊ธฐ์ ์ ๋ต์ 12+21์ธ 33์ด ์ ๋ต์ด ๋๋ค.
๐ ์ ๋ ฅ
์ฒซ์งธ ์ค์ ์ ์ n(1 ≤ n ≤ 100,000)์ด ์ฃผ์ด์ง๊ณ ๋์งธ ์ค์๋ n๊ฐ์ ์ ์๋ก ์ด๋ฃจ์ด์ง ์์ด์ด ์ฃผ์ด์ง๋ค. ์๋ -1,000๋ณด๋ค ํฌ๊ฑฐ๋ ๊ฐ๊ณ , 1,000๋ณด๋ค ์๊ฑฐ๋ ๊ฐ์ ์ ์์ด๋ค.
๐ ์ถ๋ ฅ
์ฒซ์งธ ์ค์ ๋ต์ ์ถ๋ ฅํ๋ค.
๐ ํ์ด ๋ฐฉ์
์ ํ์ ์ธ DP ํ์ด ๋ฐฉ์์ผ๋ก ํ๋ฉด ๋ฉ๋๋ค
1. ์ด์ DP ๊ฐ์ ํ๋ ์์ด ๊ฐ์ ๋ํด์ฃผ๋
2. ์ด์ DP ๊ฐ์ด ๋ง์ด๋์ค๋ผ๋ฉด ํ์ฌ ๋ํด์ฃผ๋ ๊ฐ์ด ์ค์ด๋ค๊ธฐ ๋๋ฌธ์ ์ด ๊ฒฝ์ฐ๋ง ์กฐ์ฌํด์ฃผ๋ฉด ๋ฉ๋๋ค.
๊ทธ๋ฌ๋ฉด ์ ํ์์ ๋ค์๊ณผ ๊ฐ์ด ์ธ์ธ ์ ์์ต๋๋ค.
max(DP[i-1], 0) + nums[i]
์ด์ DP ๊ฐ์ด ๋ง์ด๋์ค๋ผ๋ฉด ๋ค์ ์ค๋ ๊ฐ์ด ํ์ฌ ๊ฐ์ง๊ณ ์๋ ๊ฐ๋ณด๋ค ์์์ง ์๋ฐ์ ์๊ธฐ ๋๋ฌธ์ ์ฐ์์ ๋์ด์ฃผ๊ณ ,
0 ๋ถํฐ ๋ค์ ์์ํ๊ธฐ ์ํด์ max(DP[i-1], 0) ์์ ์ฌ์ฉํ์ต๋๋ค.
๐ ์ฝ๋
n = int(input())
nums = list(map(int, input().split()))
dp = [0 for _ in range(n)]
dp[0] = nums[0]
for i in range(1, n):
dp[i] = max(dp[i-1], 0) + nums[i]
print(max(dp))
'๐ฉ๐ปโ๐ป ์๊ณ ๋ฆฌ์ฆ > ๋ฐฑ์ค' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[๋ฐฑ์ค] 1920๋ฒ ์ ์ฐพ๊ธฐ (Python) (0) | 2025.02.11 |
---|---|
[๋ฐฑ์ค] 1965๋ฒ ์์๋ฃ๊ธฐ (Python) (0) | 2024.11.27 |
[๋ฐฑ์ค] 11727๋ฒ 2xn ํ์ผ๋ง 2 (Python) (0) | 2024.10.11 |
[๋ฐฑ์ค] 11650๋ฒ ์ขํ ์ ๋ ฌํ๊ธฐ (Python) (1) | 2024.09.14 |
[๋ฐฑ์ค] 14469๋ฒ ์๊ฐ ๊ธธ์ ๊ฑด๋๊ฐ ์ด์ 3 (Python) (0) | 2024.09.05 |