์ฌ์ค ์ด ๋ฌธ์ ๋ ์ฌ๋ ๋์ ํ๋ก๊ทธ๋๋ฐ ๋ฌธ์ ์ ๋นํด์ ๋๋ฌด ๋๋ฌด ์ฌ์ด ํธ์ด์์. ๊ทธ๋ ๋ค๊ณ ํด๋, ์ ๋ด์ ํ์ด๋ฅผ ๊ณต์ ํด๋ณผ๊ฒ์.
๋ฒ ์ด์ค ์์ด๋์ด
1. ์ฃผ์ด์ง ์ ์ ๋ฆฌ์คํธ์ ๋ํ ๋ฆฌ์คํธ๋ฅผ ๋ง๋ ๋ค( ํํ ๋งํ๋ dp list )
2. dp์ ์๋ฏธ๋ ์ด ์ธ๋ฑ์ค ์ ์ฅ์์ ์ทจํ ์ ์๋ ์ต๋์ ๋๋ค.
* ์ฌ๊ธฐ๊ฐ ์ค์ํ๋ฐ์.
* ๋ง์ฝ, ์ด ๋ฒ ์ธ๋ฑ์ค์ ์ฃผ์ด์ง ์์ ์ํด์, ์ด์ ์ธ๋ฑ์ค๊น์ง์ dp๋ฅผ ๊ฐ์ํ๊ฒ ํ๋ค๋ฉด, ๊ทธ ์ด์ ์ธ๋ฑ์ค๊น์ง์ ๊ฒฐ๊ณผ๊ฐ ์ ์ฌ์ ์ผ๋ก ์ต๋์ผ ์ ์์ต ๋๋ค. ๊ทธ๋ ๊ธฐ ๋๋ฌธ์, results๋ผ๋ "์ ์ฌ์ ์ธ ์ต๋ ๋ถ๋ถํฉ" ๋ฆฌ์คํธ๋ฅผ ๋ง๋ค์ด, ๊ทธ ํ๋ณด๊ฐ์ ๊ทธ๋ ๊ทธ๋ ์ ์ฅํด๋ ๊ฒ์ ๋๋ค.
* ํ์ง๋ง, ๋ง์ฝ, ์ด์ ์ธ๋ฑ์ค์ dp๊ฐ( ์ต๋ ๋ถ๋ถํฉ )์ ๋ํด์, ์ด๋ฒ ์ธ๋ฑ์ค์์ ๊ทธ๊ฒ์ ๊ฐ์ํ๊ฒ ํ์ง ์๋๋ค๋ฉด, ์ฆ, ์ด๋ฒ ์ธ๋ฑ์ค์ ์๊ฐ 0๋ณด๋ค ํฌ๊ฑฐ๋ ๊ฐ๋ค๋ฉด, ๊ตณ์ด ์ด์ ์ธ๋ฑ์ค dp๊ฐ์ ์ ์ฅํ ํ์๊ฐ ์๊ฒ ์ฃ .
3. ์ด์ ์ ๋นํด ๊ฐ์ํ ๋๋ง๋ค ๊ทธ๋ ๊ทธ๋ ์ ์ฅํด๋ "์ ์ฌ์ ์ธ ์ต๋ ๋ถ๋ถ ํฉ" ๋ฆฌ์คํธ์, ์ญ์ ์ต๋ ๋ถ๋ถํฉ์ด ๋ ๊ฐ๋ฅ์ฑ์ด ์๋ dp์ด๋ ์ด์ ๋ง์ง๋ง ๊ฐ์ ์ถ๊ฐํด ์ค๋๋ค. ์ ์ด๊ฑธ ๋ ๋ฃ๋๊ตฌ์? ์๋๋ฉด, ์ ํฌ๊ฐ ์ ์ฌ์ ์ธ ์ต๋ ๋ถ๋ถ ํฉ๋ค์ results์ ์ถ๊ฐํ ํ์ด๋ฐ์ด, "์ด๋ฒ ์ธ๋ฑ์ค ์ ๋๋ฌธ์, ์ด์ ์ธ๋ฑ์ค ๊น์ง์ ์ต๋ ๋ถ๋ถํฉ์ด ๊ฐ์ํ์ ๋" ์๊ธฐ ๋๋ฌธ์ด์์. ๋ง์ฝ ๋ง์ง๋ง ๋ถ๋ถ์ ์ฃผ์ด์ง ์๋ค์ด ๊ณ์ ์ฆ๊ฐํ๊ฑฐ๋, ์๋ฐํ ๋งํ๋ฉด, ๊ฐ์ํ์ง๋ง ์์๋๋ผ๋ฉด, dp[-1] ๋ํ ์ ์ฌ์ ์ธ ์ต๋ ๋ถ๋ถํฉ์ด ๋ ์ ์๊ฒ ์ฃ ?? ๋ง์ฃ ??
4. print( max( results ) )
์ฝ๋๋ ๋ค์๊ณผ ๊ฐ์์ !!
n = int( input() )
lst = []
string = input()
lst = [ int(i) for i in string.split(" ") ]
#
dp = [0] * len(lst)
dp[0] = lst[0]
#
results = []
#
for idx in range(1, n) :
#
opt3 = dp[idx-1]
#
opt1 = dp[idx-1] + lst[idx]
opt2 = lst[idx]
#
if opt3 > opt1 and opt3 > opt2 :
results.append( opt3 )
dp[idx] = max( opt1, opt2 )
else :
dp[idx] = max( opt1, opt2 )
#
results.append( dp[-1] )
#
print( max(results) )
๋งค์ฐ ๋นํจ์จ์ ์ธ ๊ฑฐ ๊ฐ๋ค ํ์๋ ๋ถ๋ค์,
๋ฐ๋ํ ์ง์ ์ ๋๊ธ์ ์จ์ฃผ์ธ์ !!!!!!
๊ฐ์ฌํ ๋ฃ๊ฒ ์ต๋๋ค