๋ฐฑ์ค (boj) ํ์ด์ฌ - 1, 2, 3 ๋ํ๊ธฐ (DP)
๋ฌธ์ ๋งํฌ :https://www.acmicpc.net/problem/9095
9095๋ฒ: 1, 2, 3 ๋ํ๊ธฐ
๋ฌธ์ ์ ์ 4๋ฅผ 1, 2, 3์ ํฉ์ผ๋ก ๋ํ๋ด๋ ๋ฐฉ๋ฒ์ ์ด 7๊ฐ์ง๊ฐ ์๋ค. ํฉ์ ๋ํ๋ผ ๋๋ ์๋ฅผ 1๊ฐ ์ด์ ์ฌ์ฉํด์ผ ํ๋ค. 1+1+1+1 1+1+2 1+2+1 2+1+1 2+2 1+3 3+1 ์ ์ n์ด ์ฃผ์ด์ก์ ๋, n์ 1, 2, 3์ ํฉ์ผ๋ก ๋ํ๋ด๋ ๋ฐฉ๋ฒ์ ์๋ฅผ ๊ตฌํ๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ์์ค. ์ ๋ ฅ ์ฒซ์งธ ์ค์ ํ ์คํธ ์ผ์ด์ค์ ๊ฐ์ T๊ฐ ์ฃผ์ด์ง๋ค. ๊ฐ ํ ์คํธ ์ผ์ด์ค๋ ํ ์ค๋ก ์ด๋ฃจ์ด์ ธ ์๊ณ , ์ ์ n์ด ์ฃผ์ด์ง๋ค. n์ ์์์ด๋ฉฐ 11๋ณด๋ค ์๋ค. ์ถ๋ ฅ ๊ฐ
www.acmicpc.net
๋ฌธ์ ๋ถ๋ฅ : ๋ค์ด๋๋ฏน ํ๋ก๊ทธ๋๋ฐ https://infinitt.tistory.com/246
์๊ณ ๋ฆฌ์ฆ - ๋ค์ด๋๋ฏน ํ๋ก๊ทธ๋๋ฐ (Dynamic Programming)
๋ค์ด๋๋ฏน ํ๋ก๊ทธ๋๋ฐ (Dynamic Programming) : DP ๊ฐ๋ : ๋ฌธ์ ๋ฅผ ๋ ์์ ๋จ์๋ก ์ชผ๊ฐ์ด ํด๊ฒฐํ๋ ์๊ณ ๋ฆฌ์ฆ. (๋ถํ ์ ๋ณต ์๊ณ ๋ฆฌ์ฆ๊ณผ ๋น์ทํ๋ค. ์ฐจ์ด์ ์ ๋ฐ๋ก ์๋ซ์ค.) ํต์ฌ์, ๊ทธ ์์ ๋จ์์ ๋ฌธ์ ๋ค์ด ๋ฐ๋ณตํด์..
infinitt.tistory.com
N์ ๋ํ๋ด๋ ๋ฐฉ๋ฒ์ ๊ฐ์๋ฅผ DP๋ผ๋ ๋ฐฐ์ด์ ๋ด๊ธฐ๋ก ํ๋ค.
๋ฐ๋ผ์ ์ ์ N์ 1,2,3 ๋ํ๊ธฐ๋ก ๋ํ๋ด๋ ๋ฐฉ๋ฒ์ DP[N]์ด๋ผ๊ณ ํ๋ค.
* ์ ํ์
์ ๋ ฅ๋ ์ ์ N์ ( = DP[N]) ๋ํ๋ด๋ ๋ฐฉ๋ฒ
- DP[N-1] ์ 1์ ๋ํ๋ค.
- DP[N-2] ์ 2๋ฅผ ๋ํ๋ค.
- DP[N-3] ์ 3์ ๋ํ๋ค.
์ด๋ ๊ฒ 3๊ฐ์ง ๋ฐฉ๋ฒ์ผ๋ก DP[N] ๋ฅผ ๋ํ ๋ผ ์ ์๋ค.
์ฆ, ์ ํ์์ผ๋ก ์ฐ๋ฉด DP[N] = DP[N-1] + DP[N-2] + DP[N-3]
* ์ ๋ต์ฝ๋ (Python)
tk = int(input())
for _ in range(tk):
n = int(input())
dp = [0 for _ in range(n+1)]
if n<3:
print(n)
else:
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])