python

[์•Œ๊ณ ๋ฆฌ์ฆ˜] #04 ๋‹ค์ด๋‚˜๋ฏน ํ”„๋กœ๊ทธ๋ž˜๋ฐ-๊ฐœ๋ฏธ์ „์‚ฌ

Soo-minJeon 2022. 7. 3. 22:31

๐Ÿ›  '๊ฐœ๋ฏธ ์ „์‚ฌ '๋ฌธ์ œ

๐Ÿ”ง  ๋ฌธ์ œ 

๊ฐœ๋ฏธ ์ „์‚ฌ๋Š” ๋ถ€์กฑํ•œ ์‹๋Ÿ‰์„ ์ถฉ๋‹นํ•˜๊ณ ์ž ๋ฉ”๋šœ๊ธฐ ๋งˆ์„์˜ ์‹๋Ÿ‰์ฐฝ๊ณ ๋ฅผ ๋ชฐ๋ž˜ ๊ณต๊ฒฉํ•˜๋ ค๊ณ  ํ•œ๋‹ค. ๋ฉ”๋šœ๊ธฐ ๋งˆ์„์—๋Š” ์—ฌ๋Ÿฌ ๊ฐœ์˜ ์‹๋Ÿ‰์ฐฝ๊ณ ๊ฐ€ ์žˆ๋Š”๋ฐ ์‹๋Ÿ‰์ฐฝ๊ณ ๋Š” ์ผ์ง์„ ์œผ๋กœ ์ด์–ด์ ธ ์žˆ๋‹ค. ๊ฐ ์‹๋Ÿ‰์ฐฝ๊ณ ์—๋Š” ์ •ํ•ด์ง„ ์ˆ˜์˜ ์‹๋Ÿ‰์„ ์ €์žฅํ•˜๊ณ  ์žˆ์œผ๋ฉฐ ๊ฐœ๋ฏธ ์ „์‚ฌ๋Š” ์‹๋Ÿ‰์ฐฝ๊ณ ๋ฅผ ์„ ํƒ์ ์œผ๋กœ ์•ฝํƒˆํ•˜์—ฌ ์‹๋Ÿ‰์„ ๋นผ์•—์„ ์˜ˆ์ •์ด๋‹ค. ์ด๋•Œ ๋ฉ”๋šœ๊ธฐ ์ •์ฐฐ๋ณ‘๋“ค์€ ์ผ์ง์„ ์ƒ์— ์กด์žฌํ•˜๋Š” ์‹๋Ÿ‰์ฐฝ๊ณ  ์ค‘์—์„œ ์„œ๋กœ ์ธ์ ‘ํ•œ ์‹๋Ÿ‰์ฐฝ๊ณ ๊ฐ€ ๊ณต๊ฒฉ๋ฐ›์œผ๋ฉด ๋ฐ”๋กœ ์•Œ์•„์ฑŒ ์ˆ˜ ์žˆ๋‹ค. ๋”ฐ๋ผ์„œ ๊ฐœ๋ฏธ ์ „์‚ฌ๊ฐ€ ์ •์ฐฐ๋ณ‘์—๊ฒŒ ๋“คํ‚ค์ง€ ์•Š๊ณ  ์‹๋Ÿ‰์ฐฝ๊ณ ๋ฅผ ์•ฝํƒˆํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ์ตœ์†Œํ•œ ํ•œ ์นธ ์ด์ƒ ๋–จ์–ด์ง„ ์‹๋Ÿ‰์ฐฝ๊ณ ๋ฅผ ์•ฝํƒˆํ•ด์•ผ ํ•œ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ์‹๋Ÿ‰์ฐฝ๊ณ  4๊ฐœ๊ฐ€ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์กด์žฌํ•œ๋‹ค๊ณ  ๊ฐ€์ •ํ•˜์ž.

{1, 3, 1, 5}

์ด๋•Œ ๊ฐœ๋ฏธ ์ „์‚ฌ๋Š” ๋‘ ๋ฒˆ์งธ ์‹๋Ÿ‰์ฐฝ๊ณ ์™€ ๋„ค ๋ฒˆ์งธ ์‹๋Ÿ‰์ฐฝ๊ณ ๋ฅผ ์„ ํƒํ–ˆ์„ ๋•Œ ์ตœ๋Œ“๊ฐ’์ธ ์ด 8๊ฐœ์˜ ์‹๋Ÿ‰์„ ๋นผ์•—์„ ์ˆ˜ ์žˆ๋‹ค. ๊ฐœ๋ฏธ ์ „์‚ฌ๋Š” ์‹๋Ÿ‰์ฐฝ๊ณ ๊ฐ€ ์ด๋ ‡๊ฒŒ ์ผ์ง์„ ์ƒ์ผ ๋•Œ ์ตœ๋Œ€ํ•œ ๋งŽ์€ ์‹๋Ÿ‰์„ ์–ป๊ธฐ๋ฅผ ์›ํ•œ๋‹ค.

 

๊ฐœ๋ฏธ ์ „์‚ฌ๋ฅผ ์œ„ํ•ด ์‹๋Ÿ‰์ฐฝ๊ณ  N๊ฐœ์— ๋Œ€ํ•œ ์ •๋ณด๊ฐ€ ์ฃผ์–ด์กŒ์„ ๋•Œ ์–ป์„ ์ˆ˜ ์žˆ๋Š” ์‹๋Ÿ‰์˜ ์ตœ๋Œ“๊ฐ’์„ ๊ตฌํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜์‹œ์˜ค.

 

- ์ž…๋ ฅ์กฐ๊ฑด

: ์ฒซ์งธ ์ค„์— ์‹๋Ÿ‰์ฐฝ๊ณ ์˜ ๊ฐœ์ˆ˜ N์ด ์ฃผ์–ด์ง„๋‹ค. (3 <= N <= 100)

: ๋‘˜์งธ ์ค„์— ๊ณต๋ฐฑ์œผ๋กœ ๊ตฌ๋ถ„๋˜์–ด ๊ฐ ์‹๋Ÿ‰์ฐฝ๊ณ ์— ์ €์žฅ๋œ ์‹๋Ÿ‰์˜ ๊ฐœ์ˆ˜ K๊ฐ€ ์ฃผ์–ด์ง„๋‹ค.(0 <= K <= 1,000)

- ์ถœ๋ ฅ์กฐ๊ฑด

: ์ฒซ์งธ ์ค„์— ๊ฐœ๋ฏธ ์ „์‚ฌ๊ฐ€ ์–ป์„ ์ˆ˜ ์žˆ๋Š” ์‹๋Ÿ‰์˜ ์ตœ๋Œ“๊ฐ’์„ ์ถœ๋ ฅํ•˜์‹œ์˜ค.

 

์ž…๋ ฅ ์˜ˆ์‹œ ์ถœ๋ ฅ ์˜ˆ์‹œ
4
1 3 1 5
8

 


๐Ÿ”ง ์•„์ด๋””์–ด

๋‹ค์ด๋‚˜๋ฏน ํ”„๋กœ๊ทธ๋ž˜๋ฐ์˜ ์กฐ๊ฑด์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

1. ํฐ ๋ฌธ์ œ๋ฅผ ์ž‘์€ ๋ฌธ์ œ๋กœ ๋‚˜๋ˆŒ ์ˆ˜ ์žˆ๋‹ค.

2. ์ž‘์€ ๋ฌธ์ œ์—์„œ ๊ตฌํ•œ ์ •๋‹ต์€ ๊ทธ๊ฒƒ์„ ํฌํ•จํ•˜๋Š” ํฐ ๋ฌธ์ œ์—์„œ๋„ ๋™์ผํ•˜๋‹ค.

 

์ด ๋ฌธ์ œ๋Š” ๋‘ ์กฐ๊ฑด ๋ชจ๋‘ ๋งŒ์กฑํ•˜๋ฏ€๋กœ ๋‹ค์ด๋‚˜๋ฏน ํ”„๋กœ๊ทธ๋ž˜๋ฐ bottom-up ๋ฐฉ๋ฒ•์„ ํ†ตํ•ด ๊ตฌํ˜„ํ•ด๋ณด๊ณ ์ž ํ•œ๋‹ค.

 

์—ฐ์†ํ•œ ์‹๋Ÿ‰์ฐฝ๊ณ ๋Š” ๊ณต๊ฒฉํ•  ์ˆ˜ ์—†์œผ๋ฏ€๋กœ

i๋ฒˆ์งธ ์‹๋Ÿ‰์ฐฝ๊ณ ๋ฅผ ๊ณต๊ฒฉํ•˜๊ฑฐ๋‚˜ / i๋ฒˆ์งธ ์‹๋Ÿ‰์ฐฝ๊ณ ๋Š” ํฌ๊ธฐํ•˜๊ณ  ๋ฐ”๋กœ i-1๋ฒˆ์งธ ์‹๋Ÿ‰์ฐฝ๊ณ ๋ฅผ ๊ณต๊ฒฉํ•˜๊ฑฐ๋‚˜

์ด ๋‘ ๊ฒฝ์šฐ๋ฅผ ๋น„๊ตํ•œ๋‹ค.

 

1) f(1)์ผ ๊ฒฝ์šฐ

- 1๋ฒˆ์งธ ์‹๋Ÿ‰์ฐฝ๊ณ  ๊ณต๊ฒฉ

= 1

 

2) f(2)์ผ ๊ฒฝ์šฐ

- 1๋ฒˆ์งธ ์‹๋Ÿ‰์ฐฝ๊ณ  ๊ณต๊ฒฉ vs 2๋ฒˆ์งธ ์‹๋Ÿ‰์ฐฝ๊ณ  ๊ณต๊ฒฉ

= 3

 

3) f(3)์ผ ๊ฒฝ์šฐ

- 2๋ฒˆ์งธ ์‹๋Ÿ‰์ฐฝ๊ณ  ๊ณต๊ฒฉ vs 3๋ฒˆ์งธ ์‹๋Ÿ‰์ฐฝ๊ณ  + 1๋ฒˆ์งธ ์‹๋Ÿ‰์ฐฝ๊ณ  ๊ณต๊ฒฉ

= f(2) vs f(1) + 3๋ฒˆ์งธ ์ €์žฅ๋œ ์‹๋Ÿ‰(1)

= 3

 

4) f(4)์ผ ๊ฒฝ์šฐ

- 3๋ฒˆ์งธ ์‹๋Ÿ‰์ฐฝ๊ณ  ๊ณต๊ฒฉ vs 4๋ฒˆ์งธ ์‹๋Ÿ‰์ฐฝ๊ณ  + 2๋ฒˆ์งธ ์‹๋Ÿ‰์ฐฝ๊ณ  ๊ณต๊ฒฉ

= f(3) vs f(2) + 4๋ฒˆ์งธ ์ €์žฅ๋œ ์‹๋Ÿ‰(5)

= 8

 


๐Ÿ”ง ์ฝ”๋“œ ์ž‘์„ฑ

# ๊ฐœ๋ฏธ์ „์‚ฌ ๋ฌธ์ œ

# ์ฐฝ๊ณ ์˜ ๊ฐœ์ˆ˜
n = int(input())

# ์ฐฝ๊ณ  ๋‹น ์‹๋Ÿ‰์ด ์–ผ๋งˆ๋‚˜ ๋“ค์—ˆ๋Š”์ง€
li = list(map(int, input().split()))

# ์‹๋Ÿ‰์ฐฝ๊ณ  N์˜ ์ตœ๋Œ€๊ฐ’์ด 100์ด๋ฏ€๋กœ * 100
re = [0] * 100

re[0] = li[0]
re[1] = max(re[0], li[1])

# i๋ฒˆ๊นŒ์ง€, ์ตœ๋Œ€๋กœ ์–ป์„ ์ˆ˜ ์žˆ๋Š” ์‹๋Ÿ‰์˜ ์ˆ˜
for i in range(2, n):
    re[i] = max(re[i-1], re[i-2] + li[i])

print(max(re))

https://github.com/Soo-minJeon/CodingTestPractice/blob/main/study_book/ch08_DynamicProgramming/ant.py