-
[Python] ๋ฐฑ์ค - 2579 ๊ณ๋จ ์ค๋ฅด๊ธฐ (DP)๐ป Algorithm/Python 2021. 10. 26. 13:08
๐ ์ฒซ ๋ฒ์งธ ์๋ (์ธ๋ฑ์ค ์๋ฌ)
- dp ํ ์ด๋ธ ๋ง๋ค์ด์ d[1], d[2]๊ฐ์ ๋ฏธ๋ฆฌ ์ง์ ํด์ฃผ๋ ๊ฒฝ์ฐ๋ ์ ๋ ฅ๊ฐ n์ด 1, 2์ผ ์ํฉ๋ ์๊ฐํด์ผ ํ๋ค.
- ๋ฐฑ์ค์์ ๋ฐํ์ ์๋ฌ(IndexError) ๋๋ฉด ๋ฌธ์ ์กฐ๊ฑด์์ ์ ๋ ฅ๊ฐ ๋ฒ์ ํ์ธํ๊ธฐ
n = int(input()) steps = [int(input()) for _ in range(n)] d = [0] * n d[0] = steps[0] d[1] = steps[0] + steps[1] d[2] = steps[2] + max(steps[0], steps[1]) for i in range(3, n): d[i] = steps[i] + max(d[i-2], d[i-3] + steps[i-1]) print(d[n-1])
โ ๋ ๋ฒ์งธ ์๋ (์ฑ๊ณต)
- ๋ฎ์ ๊ณ๋จ๋ถํฐ ์ฐจ๋ก๋ก ์๋ก ์ฌ๋ผ๊ฐ๋ ๋์ง๋ง, ๊ฐ์ฅ ์์ ์๋ ๋ง์ง๋ง ๊ณ๋จ์ ๊ผญ ๋ฐ์์ผ ํ๋ค๋ ์กฐ๊ฑด์ด ์๊ธฐ ๋๋ฌธ์ ๋ง์ง๋ง ๊ณ๋จ์์๋ถํฐ ์ถ๋ฐํ๋ ๊ฒ์ผ๋ก ์๊ฐํ๋ฉด ํ๊ธฐ ์์ํ๋ค.
- ๋ง์ง๋ง ๊ณ๋จ i์ ์ฌ๋ผ์์ ๋ดค์ ๋, ์ด ๊ณ๋จ์ ๋๋ฌํ๋ ๋ฐฉ๋ฒ์ ๋ ๊ฐ์ง์ด๋ค.
โ i-2๋ฒ์งธ ๊ณ๋จ์ ๋ฐ์ ํ i๋ฒ์งธ ๊ณ๋จ์ ๋๋ฌ
โก i-1๋ฒ์งธ ๊ณ๋จ์ ๋ฐ์ ํ i๋ฒ์งธ ๊ณ๋จ์ ๋๋ฌ
⇒ max(d[i-2], d[i-1])
- ๊ทธ๋ฌ๋ ํ์์ ๊ฒฝ์ฐ, ์ฐ์๋ 3๊ฐ์ ๊ณ๋จ์ ๋ฐ์์์ ํ๋ฅ ์ด ์กด์ฌํ๋ฏ๋ก ์ด ํ๋ฅ ์ ๋ฐฐ์ ํด์ผ ํ๋ค.
⇒ max(d[i-2], d[i-3]+steps[i-1])
- ์ฃผ์ด์ง ์ ๋ ฅ๊ฐ ์กฐ๊ฑด์ด ์์ฐ์์ด๋ฏ๋ก n์ด ๊ฐ๊ฐ 1, 2์ผ ๊ฒฝ์ฐ๋ฅผ if๋ฌธ์ผ๋ก ๋ถ๊ธฐ์ฒ๋ฆฌํ๋ค.
n = int(input()) steps = [int(input()) for _ in range(n)] if n == 1: print(steps[0]) elif n == 2: print(steps[0]+steps[1]) else: d = [0] * n d[0] = steps[0] d[1] = steps[0] + steps[1] d[2] = steps[2] + max(steps[0], steps[1]) for i in range(3, n): d[i] = steps[i] + max(d[i-2], d[i-3] + steps[i-1]) print(d[n-1])
๋ฌธ์
๊ณ๋จ ์ค๋ฅด๊ธฐ ๊ฒ์์ ๊ณ๋จ ์๋ ์์์ ๋ถํฐ ๊ณ๋จ ๊ผญ๋๊ธฐ์ ์์นํ ๋์ฐฉ์ ๊น์ง ๊ฐ๋ ๊ฒ์์ด๋ค. <๊ทธ๋ฆผ 1>๊ณผ ๊ฐ์ด ๊ฐ๊ฐ์ ๊ณ๋จ์๋ ์ผ์ ํ ์ ์๊ฐ ์ฐ์ฌ ์๋๋ฐ ๊ณ๋จ์ ๋ฐ์ผ๋ฉด ๊ทธ ๊ณ๋จ์ ์ฐ์ฌ ์๋ ์ ์๋ฅผ ์ป๊ฒ ๋๋ค.
<๊ทธ๋ฆผ 1> ์๋ฅผ ๋ค์ด <๊ทธ๋ฆผ 2>์ ๊ฐ์ด ์์์ ์์๋ถํฐ ์ฒซ ๋ฒ์งธ, ๋ ๋ฒ์งธ, ๋ค ๋ฒ์งธ, ์ฌ์ฏ ๋ฒ์งธ ๊ณ๋จ์ ๋ฐ์ ๋์ฐฉ์ ์ ๋๋ฌํ๋ฉด ์ด ์ ์๋ 10 + 20 + 25 + 20 = 75์ ์ด ๋๋ค.
<๊ทธ๋ฆผ 2> ๊ณ๋จ ์ค๋ฅด๋ ๋ฐ๋ ๋ค์๊ณผ ๊ฐ์ ๊ท์น์ด ์๋ค.
- ๊ณ๋จ์ ํ ๋ฒ์ ํ ๊ณ๋จ์ฉ ๋๋ ๋ ๊ณ๋จ์ฉ ์ค๋ฅผ ์ ์๋ค. ์ฆ, ํ ๊ณ๋จ์ ๋ฐ์ผ๋ฉด์ ์ด์ด์ ๋ค์ ๊ณ๋จ์ด๋, ๋ค์ ๋ค์ ๊ณ๋จ์ผ๋ก ์ค๋ฅผ ์ ์๋ค.
- ์ฐ์๋ ์ธ ๊ฐ์ ๊ณ๋จ์ ๋ชจ๋ ๋ฐ์์๋ ์ ๋๋ค. ๋จ, ์์์ ์ ๊ณ๋จ์ ํฌํจ๋์ง ์๋๋ค.
- ๋ง์ง๋ง ๋์ฐฉ ๊ณ๋จ์ ๋ฐ๋์ ๋ฐ์์ผ ํ๋ค.
๋ฐ๋ผ์ ์ฒซ ๋ฒ์งธ ๊ณ๋จ์ ๋ฐ๊ณ ์ด์ด ๋ ๋ฒ์งธ ๊ณ๋จ์ด๋, ์ธ ๋ฒ์งธ ๊ณ๋จ์ผ๋ก ์ค๋ฅผ ์ ์๋ค. ํ์ง๋ง, ์ฒซ ๋ฒ์งธ ๊ณ๋จ์ ๋ฐ๊ณ ์ด์ด ๋ค ๋ฒ์งธ ๊ณ๋จ์ผ๋ก ์ฌ๋ผ๊ฐ๊ฑฐ๋, ์ฒซ ๋ฒ์งธ, ๋ ๋ฒ์งธ, ์ธ ๋ฒ์งธ ๊ณ๋จ์ ์ฐ์ํด์ ๋ชจ๋ ๋ฐ์ ์๋ ์๋ค.
๊ฐ ๊ณ๋จ์ ์ฐ์ฌ ์๋ ์ ์๊ฐ ์ฃผ์ด์ง ๋ ์ด ๊ฒ์์์ ์ป์ ์ ์๋ ์ด ์ ์์ ์ต๋๊ฐ์ ๊ตฌํ๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ์์ค.
์ ๋ ฅ
์ ๋ ฅ์ ์ฒซ์งธ ์ค์ ๊ณ๋จ์ ๊ฐ์๊ฐ ์ฃผ์ด์ง๋ค.
๋์งธ ์ค๋ถํฐ ํ ์ค์ ํ๋์ฉ ์ ์ผ ์๋์ ๋์ธ ๊ณ๋จ๋ถํฐ ์์๋๋ก ๊ฐ ๊ณ๋จ์ ์ฐ์ฌ ์๋ ์ ์๊ฐ ์ฃผ์ด์ง๋ค. ๊ณ๋จ์ ๊ฐ์๋ 300์ดํ์ ์์ฐ์์ด๊ณ , ๊ณ๋จ์ ์ฐ์ฌ ์๋ ์ ์๋ 10,000์ดํ์ ์์ฐ์์ด๋ค.
์ถ๋ ฅ
์ฒซ์งธ ์ค์ ๊ณ๋จ ์ค๋ฅด๊ธฐ ๊ฒ์์์ ์ป์ ์ ์๋ ์ด ์ ์์ ์ต๋๊ฐ์ ์ถ๋ ฅํ๋ค.
์์ ์ ๋ ฅ 1
6
10
20
15
25
10
20
์์ ์ถ๋ ฅ 1
75
'๐ป Algorithm > Python' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Python] LeetCode 20 Valid Parentheses (Stack) (0) 2022.07.02 [Python] LeetCode 121 Best Time to Buy and Sell Stock (DP) (0) 2022.07.02 [Python] ๋ฐฑ์ค - 1912 ์ฐ์ํฉ (DP) (0) 2021.10.25 [Python] ์ด์ฝํ - ์ ๋ ฌ๋ ๋ฐฐ์ด์์ ํน์ ์์ ๊ฐ์ ๊ตฌํ๊ธฐ (์ด์งํ์) (0) 2021.10.20 [Python] ์ด์ฝํ - ๋ก๋ณถ์ด ๋ก ๋ง๋ค๊ธฐ (์ด์งํ์) (0) 2021.10.20