๋ฐฑ์ค€ 1912 ํŒŒ์ด์ฌ

2022. 1. 20. 20:47ใ†๐Ÿ”ฑ Algorithm/DP

 

1912๋ฒˆ: ์—ฐ์†ํ•ฉ

์ฒซ์งธ ์ค„์— ์ •์ˆ˜ n(1 ≤ n ≤ 100,000)์ด ์ฃผ์–ด์ง€๊ณ  ๋‘˜์งธ ์ค„์—๋Š” n๊ฐœ์˜ ์ •์ˆ˜๋กœ ์ด๋ฃจ์–ด์ง„ ์ˆ˜์—ด์ด ์ฃผ์–ด์ง„๋‹ค. ์ˆ˜๋Š” -1,000๋ณด๋‹ค ํฌ๊ฑฐ๋‚˜ ๊ฐ™๊ณ , 1,000๋ณด๋‹ค ์ž‘๊ฑฐ๋‚˜ ๊ฐ™์€ ์ •์ˆ˜์ด๋‹ค.

www.acmicpc.net

 

 

์ ‘๊ทผ ๋ฐฉ๋ฒ•

์—ฐ์†๋œ ์ˆ˜๋ฅผ ๋”ํ•ด์„œ ๊ฐ€์žฅ ํฐ ์ˆ˜๋ฅผ ๋งŒ๋“œ๋Š” ๊ฒฝ์šฐ๋ฅผ ์ฐพ์•„์•ผํ•œ๋‹ค.

์ฃผ์–ด์ง„ ๋ฐฐ์—ด์˜ ์ˆซ์ž ์ค‘ ์Œ์ˆ˜๊ฐ€ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์ด๋ฅผ ๋”ํ•˜๋”๋ผ๋„ ์ตœ๋Œ€ ํ•ฉ์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋Š” ๊ฒฝ์šฐ๋ฅผ ์ฐพ์•„์•ผํ•œ๋‹ค. 

 

์•„๋ž˜ ๋ฉ”๋ชจ๋Š” ์ฃผ์–ด์ง„ ํ…Œ์ŠคํŠธ์ผ€์ด์Šค๋ฅผ ์‹ค์ œ๋กœ ๋”ํ•ด๋ณธ ๊ณผ์ •์„ ๋‚˜ํƒ€๋‚ธ๋‹ค.

arr ์€ ์ฃผ์–ด์ง„ ์ž…๋ ฅ์ด๊ณ , dp ์˜ ๊ฐ ์›์†Œ๋Š” ์—ฐ์†๋œ ํ•ฉ์„ ๋‚˜ํƒ€๋‚ธ๋‹ค.

dp[i] ์˜ ๊ฐ’์€ arr ์˜ ์ฒซ๋ฒˆ์งธ ์›์†Œ๋ถ€ํ„ฐ ์ฐจ๋ก€๋กœ ๋”ํ•ด๊ฐ€๋ฉด์„œ ์—…๋ฐ์ดํŠธ ๋œ๋‹ค. ์ฆ‰ dp[i] ์˜ ๊ฐ’์€ dp[i - 1] + arr[i] ๊ฐ€ ๋˜๋Š” ์…ˆ์ด๋‹ค.

์ค‘์š”ํ•œ ์ ์€ arr[i] ์˜ ๊ฐ’์„ ๋”ํ–ˆ๋Š”๋ฐ๋„ dp[i] ์˜ ๊ฐ’์ด arr[i] ๋ณด๋‹ค ์ž‘์œผ๋ฉด, ๋”ํ•˜์ง€ ์•Š๊ณ  ๊ทธ๋ƒฅ arr[i] ๋ฅผ dp[i] ์˜ ๊ฐ’์œผ๋กœ ํ• ๋‹นํ•œ๋‹ค.

 

์ฝ”๋“œ

N = int(input())
arr = list(map(int, input().split()))

dp = [0] * N
dp[0] = arr[0]
for i in range(1, N):
    dp[i] = max(dp[i - 1] + arr[i], arr[i])
print(max(dp))