ํฐ์คํ ๋ฆฌ ๋ทฐ
1, 2, 3 ๋ํ๊ธฐ ์๋ฆฌ์ฆ
- 1, 2, 3 ๋ํ๊ธฐ
- 1, 2, 3 ๋ํ๊ธฐ 2
- 1, 2, 3 ๋ํ๊ธฐ 3
- 1, 2, 3 ๋ํ๊ธฐ 4
- 1, 2, 3 ๋ํ๊ธฐ 5
- 1, 2, 3 ๋ํ๊ธฐ 6
- 1, 2, 3 ๋ํ๊ธฐ 7
- 1, 2, 3 ๋ํ๊ธฐ 8
- 1, 2, 3 ๋ํ๊ธฐ 9
๋ฌธ์
๋ฌธ์ ํ์ด
๊ธฐ์กด์ ๋ฌธ์ ์ ๋ฌ๋ฆฌ ์ฐ์๋ ์ซ์๋ฅผ ์ฌ์ฉํ ์ ์๋ค๋ ์กฐ๊ฑด์ด ์ถ๊ฐ๋ ๋ฌธ์ ์ด๋ค. ๋ฌธ์ ๋ฅผ ํ๊ธฐ ์ํด์ DP๋ฅผ 2์ฐจ์ ๋ฐฐ์ด๋ก ๋๋์ด ์๊ฐํ๋ฉด ์ฝ๊ฒ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ์ ์๋ค. ์๋ฅผ ๋ค์ด 1, 2, 3 ๋ํ๊ธฐ์ ๊ฒฝ์ฐ ์ ํ์์ `dp[n] = dp[n - 1] + dp[n - 2] + dp[n - 3]`์ ์ ์ํ ์ ์์๋ค. ํ์ง๋ง ์ด ๋ฌธ์ ์์๋ ๋ค์ ์ซ์๊ฐ ์ฐ์๋๋์ง ํ์ธ์ด ํ์ํ๋ค.
๋ฐ๋ผ์ DP๋ฅผ 2์ฐจ์ ๋ฐฐ์ด๋ก `dp[๊ตฌํ๊ณ ์ ํ๋ ์์ ํฉ][๋ง์ง๋ง ๋ท์๋ฆฌ์ ์]`์ ๊ฐ์ด ๊ตฌ์ฑํ๊ณ ๊ฐ ์์์ ๋ํด ๋ค์๊ณผ ๊ฐ์ด ๋ํ๋ผ ์ ์๋ค.
dp[0] = [0, 0, 0, 0]
dp[1] = [0, 1, 0, 0]
dp[2] = [0, 0, 1, 0]
dp[3] = [0, 1, 1, 1]
์ฆ DP[1]์ ๊ฒฝ์ฐ DP[1][1]์ ์ ์ธํ๊ณ ๋๋จธ์ง์ ๊ฒฝ์ฐ๋ 1์ ๋ํ๋ผ ์ ์๋ค. DP[2]์ ๊ฒฝ์ฐ `1 + 1`์ ์ฐ์๋๊ณ 2๋ฅผ ์ฌ์ฉํ์ฌ์๋ง 2๋ฅผ ๊ตฌํ ์ ์๋ค. DP[3]์ ๊ฒฝ์ฐ ๋ท์๋ฆฌ๊ฐ 1, 2, 3์ผ๋ก ์ค๋ ๊ฒฝ์ฐ ๋ชจ๋ ๋ํ๋ผ ์ ์๋๋ฐ `2 + 1`, `1 + 2`, `3`๊ณผ ๊ฐ์ ๊ฒฝ์ฐ์ ์๊ฐ ์์ ์ ์๋ค.
์ด์ ๊ฐ์ ๊ท์น์ ํตํด ๋ฌธ์ ๋ฅผ ํ๊ธฐ ์ํ ์ ํ์์ ์ด๋์ด ๋ผ ์ ์๋ค.
- `dp[n][1] = dp[n - 1][2] + dp[n - 1][3]`
- `dp[n][2] = dp[n - 2][1] + dp[n - 2][3]`
- `dp[n][3] = dp[n - 3][1] + dp[n - 3][2]`
์ฝ๋
from sys import stdin
if __name__ == '__main__':
MAX = 100001
divisor = 1000000009
dp = [[0] * 4 for _ in range(MAX)]
dp[0] = [0] * 4
dp[1] = [0, 1, 0, 0]
dp[2] = [0, 0, 1, 0]
dp[3] = [0] + [1] * 3
for i in range(4, MAX):
dp[i][1] = (dp[i - 1][2] + dp[i - 1][3]) % divisor
dp[i][2] = (dp[i - 2][1] + dp[i - 2][3]) % divisor
dp[i][3] = (dp[i - 3][1] + dp[i - 3][2]) % divisor
t = int(stdin.readline())
for _ in range(t):
n = int(stdin.readline())
print(sum(dp[n]) % divisor)
๊ฐ ๊ฒฝ์ฐ์ ์๋ฅผ ๊ตฌํ ๋๋ง๋ค `divisor`๋ก ๋๋์ด์ฃผ์ง ์์ผ๋ฉด ๋ฉ๋ชจ๋ฆฌ ์ด๊ฐ๊ฐ ๋ฐ์ํ๋ค.
'๐จโ๐ป ์ฝ๋ฉํ ์คํธ > ๋ฐฑ์ค' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
๋ฐฑ์ค: 15992 1, 2, 3 ๋ํ๊ธฐ 7 (0) | 2020.09.29 |
---|---|
๋ฐฑ์ค: 15991 1, 2, 3 ๋ํ๊ธฐ 6 (0) | 2020.09.29 |
๋ฐฑ์ค: 15989 1, 2, 3 ๋ํ๊ธฐ 4 (0) | 2020.09.28 |
๋ฐฑ์ค: 12101 1, 2, 3 ๋ํ๊ธฐ 2 (0) | 2020.09.28 |
๋ฐฑ์ค: 14238 ์ถ๊ทผ ๊ธฐ๋ก (0) | 2020.09.27 |