728x90
SMALL
DP ๋ฌธ์
https://www.acmicpc.net/problem/9095
๐ก ํ์ด์ฝ๋ (์ฑ๊ณต 1)
import sys
t = int(sys.stdin.readline())
def dynamic(n):
dp = [0 for _ in range(n + 1)]
dp[0] = 1
dp[1] = 1
dp[2] = 2
dp[3] = 4
for i in range(4, n + 1):
dp[i] = dp[i - 1] + dp[i - 2] + dp[i - 3]
print(dp[n])
for _ in range(t):
n = int(sys.stdin.readline())
if n == 0:
print(1)
elif n == 1:
print(1)
elif n == 2:
print(2)
elif n == 3:
print(4)
else:
dynamic(n)
์ ๊ทผ ๋ฐฉ์
4๋ฅผ 1, 2, 3์ผ๋ก ํํํ๋ ๋ฐฉ๋ฒ์ 7๊ฐ์ง์ด๋ค.
5๋ฅผ ํํํ๋ ๋ฐฉ๋ฒ์ 4์์ 1์ ๋ํ๋ ๋ฐฉ๋ฒ(7๊ฐ์ง) + 3์์ 2๋ฅผ ๋ํ๋ ๋ฐฉ๋ฒ(4๊ฐ์ง) + 2์์ 3์ ๋ํ๋ ๋ฐฉ๋ฒ(2๊ฐ์ง)์ด ์๋ค.
= ์ด 13๊ฐ์ง(7 + 4 + 2)
6๋ฅผ ํํํ๋ ๋ฐฉ๋ฒ์ 5์์ 1์ ๋ํ๋ ๋ฐฉ๋ฒ(13๊ฐ์ง) + 4์์ 2๋ฅผ ๋ํ๋ ๋ฐฉ๋ฒ(7๊ฐ์ง) + 3์์ 3์ ๋ํ๋ ๋ฐฉ๋ฒ(4๊ฐ์ง)์ด ์๋ค.
= ์ด 24๊ฐ์ง(13 + 7 + 4)
์ ํ์
N์ ํํํ๋ ๋ฐฉ๋ฒ์ผ๋ก๋ ๋ค์๊ณผ ๊ฐ๋ค.
dp[i] = dp[i - 1] + dp[i - 2] + dp[i - 3]
= dp[i-1]์์ 1์ ๋ํ๋ ๋ฐฉ๋ฒ + dp[i-2]์์ 2์ ๋ํ๋ ๋ฐฉ๋ฒ + dp[i-3]์์ 3์ ๋ํ๋ ๋ฐฉ๋ฒ
dp[i] = dp[i - 1] + dp[i - 2] + dp[i - 3]
๋์ ๋ฌธ์ ์ ๋ค๋ฅธ์
- ๋์ ๋ฌธ์ ๋ ์ฃผ์ด์ง ๋์ ์ ๊ธ์ก์ ํ์ฉํ์ฌ, ๊ทธ ๊ธ์ก์ ํฉ์ด k์์ด ๋๋๋ก ๋ง๋๋ ์กฐํฉ ๋ฌธ์ ์ด๋ค.
- ๋์ ์ ๊ตฌ์ฑ์ด ๊ฐ์๋ฐ, ์์๊ฐ ๋ค๋ฅธ ๊ฒ์ ๊ฐ์ ๊ฒฝ์ฐ์ด๊ธฐ ๋๋ฌธ์ด๋ค.
- ์ด ๋ฌธ์ ๋ 1, 2, 3์ ํ์ฉํ์ฌ, ๊ทธ ํฉ์ด k๊ฐ ๋๋๋ก ๋ง๋๋ ์์ด ๋ฌธ์ ์ด๋ค.
- ์๋ ๋๊ฐ์ง ๊ฒฝ์ฐ๋ ๊ฐ๊ฐ ๋ค๋ฅธ ๊ฒฝ์ฐ์ด๋ค.
- 1+2+1
- 2+1+1
๐ก ํ์ด์ฝ๋ (์ฑ๊ณต 2)
import sys
t = int(sys.stdin.readline())
def sol(n):
dp = [0 for _ in range(n + 1)]
dp[0] = 1
for i in range(1, n + 1):
for j in range(1, 4):
if i - j >= 0:
dp[i] += dp[i - j]
print(dp[n])
for _ in range(t):
n = int(sys.stdin.readline())
sol(n)
์ฐธ๊ณ ๋ฌธํ
https://ggasoon2.tistory.com/39
728x90
LIST
'Algorithm > DP' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[๋ฐฑ์ค] 2293 : ๋์ 1 (ํ์ด์ฌ) (0) | 2024.08.23 |
---|---|
[๋ฐฑ์ค] 15989 : 1, 2, 3 ๋ํ๊ธฐ 4 (ํ์ด์ฌ) (0) | 2024.08.23 |
[๋ฐฑ์ค] 17404 : RGB ๊ฑฐ๋ฆฌ 2 (ํ์ด์ฌ) (0) | 2024.08.12 |
[๋ฐฑ์ค] 1149 : RGB ๊ฑฐ๋ฆฌ (ํ์ด์ฌ) (0) | 2024.08.12 |
[๋ฐฑ์ค] 10986 : ๋๋จธ์ง ํฉ (ํ์ด์ฌ) (0) | 2024.08.08 |