๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

study money ๐Ÿ‘บ

[์‰ฌ์šด ์„ค๋ช…] ๋ฐฑ์ค€ 1912๋ฒˆ ์—ฐ์†ํ•ฉ(ํŒŒ์ด์ฌ, dp)

www.acmicpc.net/problem/1912

 

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

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

www.acmicpc.net

 ์‚ฌ์‹ค ์ด ๋ฌธ์ œ๋Š” ์—ฌ๋Š ๋™์ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๋ฌธ์ œ์— ๋น„ํ•ด์„œ ๋„ˆ๋ฌด ๋„ˆ๋ฌด ์‰ฌ์šด ํŽธ์ด์—์š”. ๊ทธ๋ ‡๋‹ค๊ณ  ํ•ด๋„, ์ œ ๋”ด์˜ ํ’€์ด๋ฅผ ๊ณต์œ ํ•ด๋ณผ๊ฒŒ์š”.

 

๋ฒ ์ด์Šค ์•„์ด๋””์–ด

 


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

 

๋งค์šฐ ๋น„ํšจ์œจ์ ์ธ ๊ฑฐ ๊ฐ™๋‹ค ํ•˜์‹œ๋Š” ๋ถ„๋“ค์€,

๋”ฐ๋”ํ•œ ์ง€์ ์„ ๋Œ“๊ธ€์— ์จ์ฃผ์„ธ์š” !!!!!! 

 

๊ฐ์‚ฌํžˆ ๋“ฃ๊ฒ ์Šต๋‹ˆ๋‹ค