๐Ÿ‘ฉ๐Ÿป‍๐Ÿ’ป ์•Œ๊ณ ๋ฆฌ์ฆ˜/๋ฐฑ์ค€

[๋ฐฑ์ค€] 1912๋ฒˆ ์—ฐ์†ํ•ฉ (Python)

mallin 2024. 11. 15. 14:36

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))