์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋ฌธ์ œ/BOJ_Python

[BOJ/Step15] 2156 : ํฌ๋„์ฃผ ์‹œ์‹ (Python)

NaNaRin๐Ÿ™ƒ 2021. 2. 26. 18:47

www.acmicpc.net/problem/2156

 

2156๋ฒˆ: ํฌ๋„์ฃผ ์‹œ์‹

ํšจ์ฃผ๋Š” ํฌ๋„์ฃผ ์‹œ์‹ํšŒ์— ๊ฐ”๋‹ค. ๊ทธ ๊ณณ์— ๊ฐ”๋”๋‹ˆ, ํ…Œ์ด๋ธ” ์œ„์— ๋‹ค์–‘ํ•œ ํฌ๋„์ฃผ๊ฐ€ ๋“ค์–ด์žˆ๋Š” ํฌ๋„์ฃผ ์ž”์ด ์ผ๋ ฌ๋กœ ๋†“์—ฌ ์žˆ์—ˆ๋‹ค. ํšจ์ฃผ๋Š” ํฌ๋„์ฃผ ์‹œ์‹์„ ํ•˜๋ ค๊ณ  ํ•˜๋Š”๋ฐ, ์—ฌ๊ธฐ์—๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋‘ ๊ฐ€์ง€ ๊ทœ

www.acmicpc.net


2579 : ๊ณ„๋‹จ ์˜ค๋ฅด๊ธฐ ๋ฌธ์ œ๋ž‘ ๋˜‘๊ฐ™์ด ํ’€๋ฉด ๋œ๋‹ค

๋Œ€์‹  ๊ณ„๋‹จ์€ ๋งˆ์ง€๋ง‰ ๊ณ„๋‹จ์„ ๊ผญ ๋ฐŸ์•„์•ผ ํ•˜์ง€๋งŒ ๋งˆ์ง€๋ง‰ ํฌ๋„์ฃผ๋ฅผ ๋งˆ์‹ค ํ•„์š”๋Š” ์—†๊ธฐ ๋•Œ๋ฌธ์—

๋งจ ๋งˆ์ง€๋ง‰ ํฌ๋„์ฃผ์˜ ์ตœ์ข… ์–‘์ด ์•„๋‹Œ ๋ฆฌ์ŠคํŠธ ์ค‘ ์ตœ๋Œ“๊ฐ’์„ ์ถœ๋ ฅํ•ด์ฃผ๋ฉด ๋œ๋‹ค

 

๋ผ๊ณ  ์ƒ๊ฐํ–ˆ๋Š”๋ฐ ์ด๊ฒŒ ์›ฌ๊ฑธ

๋Œ€๋œธ ํ‹€๋ ค๋ฒ„๋ ค์„œ ๋ญ๊ฐ€ ํ‹€๋ฆฐ๊ฑด์ง€ ์ฐพ์•„๋ดค๋Š”๋ฐ

์•„๋‹ˆ n๋ฒˆ์งธ ํฌ๋„์ฃผ๋ฅผ ๋งˆ์‹œ๋Š”๋ฐ ๋Œ€์ฒด ์™œ n๋ฒˆ์งธ ํฌ๋„์ฃผ๋ฅผ ๋งˆ์‹œ์ง€ ์•Š๋Š” ๊ฒฝ์šฐ๊ฐ€ ๊ณ ๋ ค์‚ฌํ•ญ์— ํฌํ•จ๋œ๋‹จ ๋ง์ธ๊ฐ€?

์„ธ์ƒ์—๋‚˜ 1๋„ ์ดํ•ด ์•ˆ๊ฐ€๋„ค ...

 

๊ทธ๋ž˜์„œ ๋ฐฑ์ค€์— ์งˆ๋ฌธ์„ ์˜ฌ๋ ธ๋Š”๋ฐ ๋Œ“๊ธ€๋กœ ๋ฐ˜๋ก€๋ฅผ ์•Œ๋ ค์ฃผ์‹ฌ

# 2156.PY

n = int(input())

grape = [int(input()) for _ in range(n)]
t_grape = [0 for _ in range(n)]

t_grape[0] = grape[0]

if n > 1:
    t_grape[1] = grape[0] + grape[1]
if n > 2:
    t_grape[2] = grape[2] + max(grape[0], grape[1])

for i in range(3, n):
    t_grape[i] = grape[i] + max(grape[i-1] + t_grape[i-3], t_grape[i-2])

print(max(t_grape))

์ด๋ ‡๊ฒŒ ํ’€์—ˆ๋Š”๋ฐ ํฌ๋„์ฃผ 6์ž” 100 100 1 1 100 100 ์„ ์ž…๋ ฅํ•˜๋ฉด ๋‹ต์€ 400์ธ๋ฐ ๋‚ด ์ฝ”๋“œ๋Š” 301์ด ๋‚˜์˜จ๋‹ค..

 

๋ญ๊ฐ€ ๋ฌธ์ œ์ธ๊ณ  ๋ณด๋‹ˆ๊นŒ ํฌ๋„์ฃผ๋ฅผ ๋‘์ž” ๋›ฐ์–ด๋„˜์„ ์ˆ˜ ์žˆ๋Š”๋ฐ ๋‚ด ์ฝ”๋“œ๋Š” ๋ฌด์กฐ๊ฑด ํ•˜๋‚˜๋งŒ ๋›ฐ์–ด๋„˜๋Š”๊ฒŒ ๋˜๋Š”๊ฒƒ์ด๋‹ค

n๋ฒˆ์งธ ์ดํ•ฉ = n๋ฒˆ์งธ ์–‘ + max( n-1๋ฒˆ์งธ ์–‘ + n-3๋ฒˆ์งธ ์ดํ•ฉ, n-2๋ฒˆ์งธ ์ดํ•ฉ )์ด๊ธฐ ๋•Œ๋ฌธ์—

์ค‘๊ฐ„์— ๋‘๊ฐœ๋ฅผ ๊ฑด๋„ˆ๋›ฐ๋ฉด ๊ทธ ๊ฒฝ์šฐ๋ฅผ ๊ณ„์‚ฐํ•  ์ˆ˜๊ฐ€ ์—†๋‹ค

๊ทธ๋ž˜์„œ ์ค‘๊ฐ„์— ๋‘๊ฐœ ๊ฑด๋„ˆ๋›ฐ๋Š” ๊ฒฝ์šฐ๋ฅผ ์ถ”๊ฐ€ํ•ด์„œ

# 2156.PY

n = int(input())

grape = [int(input()) for _ in range(n)]
t_grape = [0 for _ in range(n)]

t_grape[0] = grape[0]

if n > 1:
    t_grape[1] = grape[0] + grape[1]
if n > 2:
    t_grape[2] = grape[2] + max(grape[0], grape[1])

for i in range(3, n):
    t_grape[i] = grape[i] + max(t_grape[i-2], grape[i-1] + t_grape[i-3], grape[i-1] + t_grape[i-4])

print(max(t_grape))

n๋ฒˆ์งธ ์ดํ•ฉ = n๋ฒˆ์งธ ์–‘ + max( n-2๋ฒˆ์งธ ์ดํ•ฉ, n-1๋ฒˆ์งธ ์–‘ + n-3๋ฒˆ์งธ ์ดํ•ฉ, n-1๋ฒˆ์งธ ์–‘ + n-4๋ฒˆ์งธ ์ดํ•ฉ )

์œผ๋กœ ๋‘๊ฐœ ๊ฑด๋„ˆ๋›ฐ๋Š” ๊ฒฝ์šฐ๋ฅผ ์ถ”๊ฐ€ํ•ด์ฃผ์—ˆ๋‹ค

๊ทธ๋žฌ๋”๋‹ˆ ์ •๋‹ต!

 

์‚ฌ์‹ค ๋งž๊ธด ํ–ˆ๋Š”๋ฐ n๋ฒˆ์งธ ํฌ๋„์ฃผ๋ฅผ ์•ˆ๋งˆ์‹œ๋Š” ๊ฒฝ์šฐ๋ฅผ ์ถ”๊ฐ€ํ•œ ๊ฑฐ๋ž‘ ์–ด๋–ค์‹์œผ๋กœ ๋‹ค๋ฅด๊ณ 

n๋ฒˆ์งธ ํฌ๋„์ฃผ๋ฅผ ์•ˆ๋งˆ์‹œ๋Š” ๊ฒฝ์šฐ๋Š” ์–ด๋–ป๊ฒŒ ๋งž๋Š”๊ฑด์ง€ ์ข€.? ์ดํ•ด๊ฐ€ ์•ˆ๊ฐ€๊ธด ํ•œ๋‹ค

๊ทธ๋ƒฅ ๋ฌด์กฐ๊ฑด ์ตœ๋Œ“๊ฐ’ ๊ตฌํ•˜๋Š” ๊ฑฐ๋‹ˆ๊นŒ ๊ทธ๊ฑธ ๋”ํ•˜๋‚˜.?

๊ทผ๋ฐ ๊ทธ๋Ÿผ n๋ฒˆ์งธ๋Š” ๊ฒฐ๊ตญ ์•ˆ๋งˆ์‹ ๊ฑด๋ฐ ๋’ค์— ๊ณ„์‚ฐํ•  ๋•Œ ์—ฐ์†ํ•ด์„œ ๋งˆ์‹œ๋Š”๊ฑธ ํ™•์ธํ•˜๊ธฐ๊ฐ€ ์–ด๋ ต์ง€ ์•Š๋‚˜... ๋ชจ๋ฅด๊ฒ ๋‹ค ใ…œ

์•”ํŠผ ๋‚œ ์ด๋ ‡๊ฒŒ ํ’€์—ˆ์Œ

 

์‚ฌ์‹ค ์„ธ๊ฐœ ๋„ค๊ฐœ ๋‹ค์„ฏ๊ฐœ ๊ฑด๋„ˆ๋›ฐ๋Š” ๊ฒฝ์šฐ๋„ ์žˆ์„๊ฑฐ ๊ฐ™๊ธฐ๋Š” ํ•œ๋ฐ ๋ชจ๋ฅด๊ฒ ๋‹ค ๊ทธ๋• ์–ด๋–ป๊ฒŒ ํ•ด์•ผ๋˜๋Š”์ง€

๋ฌธ์ œ์— ๋ช‡๊ฐœ ๊ฑด๋„ˆ๋›ธ ์ˆ˜ ์žˆ๋Š”์ง€ ๋‚˜์˜ค๋ฉด ์ข‹์„ํ…๋Ž