ํฐ์คํ ๋ฆฌ ๋ทฐ
728x90
๋ฐ์ํ
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๋ฅผ ๊ตฌ์ฑํ ๋, `DP[ํ์/์ง์][N]`๊ณผ ๊ฐ์ด ์ ์ธํ์ฌ์ ๊ฐ ๊ฒฝ์ฐ์ ๋ํด ์ ํ์์ ํตํด ์ฐพ์๊ฐ๋ฉด ๋๋ค.
- N์ด 1 ์ธ ๊ฒฝ์ฐ
- ์ง์๋ก ๋ํ๋ผ ์ ์๋ ๊ฒฝ์ฐ : X
- ํ์๋ก ๋ํ๋ผ ์ ์๋ ๊ฒฝ์ฐ : `1`
- N์ด 2์ธ ๊ฒฝ์ฐ
- ์ง์๋ก ๋ํ๋ผ ์ ์๋ ๊ฒฝ์ฐ : `1 + 1`
- ํ์๋ก ๋ํ๋ผ ์ ์๋ ๊ฒฝ์ฐ : `2`
- N์ด 3์ธ ๊ฒฝ์ฐ
- ์ง์๋ก ๋ํ๋ผ ์ ์๋ ๊ฒฝ์ฐ : `1 + 2`, `2 + 1`
- ํ์๋ก ๋ํ๋ผ ์ ์๋ ๊ฒฝ์ฐ : `3`, `1 + 1 + 1`
์ด์ ๊ฐ์ ๊ฒฝ์ฐ์ ์๋ฅผ ๋์ดํด๋ณด๋ฉด ์ ํ์ `DP[ํ์][N] = DP[์ง์][N - 1] + DP[์ง์][N - 2] + DP[์ง์][N - 3]`๊ณผ `DP[์ง์][N] = DP[ํ์][N - 1] + DP[ํ์][N - 2] + DP[ํ์][N - 3]`๋ฅผ ์ด๋์ด๋ผ ์ ์๋ค.
์ฝ๋
from sys import stdin
if __name__ == '__main__':
MAX, ODD, EVEN = 100001, 0, 1
divisor = 1000000009
dp = [[0] * 100001 for _ in range(2)]
dp[ODD][1] = 1
dp[ODD][2], dp[EVEN][2] = 1, 1
dp[ODD][3], dp[EVEN][3] = 2, 2
for i in range(4, MAX):
dp[ODD][i] = \
(dp[EVEN][i - 1] + dp[EVEN][i - 2] + dp[EVEN][i - 3]) % divisor
dp[EVEN][i] = \
(dp[ODD][i - 1] + dp[ODD][i - 2] + dp[ODD][i - 3]) % divisor
t = int(stdin.readline())
for _ in range(t):
n = int(stdin.readline())
print(dp[ODD][n], dp[EVEN][n])
728x90
๋ฐ์ํ
'๐จโ๐ป ์ฝ๋ฉํ ์คํธ > ๋ฐฑ์ค' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
๋ฐฑ์ค: 5014 ์คํํธ๋งํฌ (0) | 2020.10.01 |
---|---|
๋ฐฑ์ค: 16195 1, 2, 3 ๋ํ๊ธฐ 9 (0) | 2020.09.30 |
๋ฐฑ์ค: 15992 1, 2, 3 ๋ํ๊ธฐ 7 (0) | 2020.09.29 |
๋ฐฑ์ค: 15991 1, 2, 3 ๋ํ๊ธฐ 6 (0) | 2020.09.29 |
๋ฐฑ์ค: 15990 1, 2, 3 ๋ํ๊ธฐ 5 (0) | 2020.09.29 |
๋๊ธ
๊ธ ๋ณด๊ดํจ
์ต๊ทผ์ ์ฌ๋ผ์จ ๊ธ
์ต๊ทผ์ ๋ฌ๋ฆฐ ๋๊ธ