ํฐ์คํ ๋ฆฌ ๋ทฐ
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
๋ฌธ์
๋ฌธ์ ํ์ด
๊ธฐ์กด์ 1, 2, 3 ๋ํ๊ธฐ ๋ฌธ์ ์ ๋ค๋ฅธ ์ ์ด ์๋ค๋ฉด ์์๊ฐ ๋ค๋ฅธ ๊ฒฝ์ฐ ํ๋์ ๊ฒฝ์ฐ๋ก ์๊ฐํ๋ค๋ ๊ฒ์ด๋ค. ์ด๋ฅผ ๊ตฌํ๊ธฐ ์ํด์๋ DFS๋ก ์กฐํฉ์ ๊ตฌํ๋ ๋ฐฉ์์ผ๋ก ํ๊ณ ์ ํ๋ค๋ฉด N์ด 10000์ด๋ผ๋ ๋ฒ์๋ฅผ ๊ฐ๊ธฐ์ ์๊ฐ ์ด๊ณผ๊ฐ ๋ฐ์ํ๋ค. ๋ฐ๋ผ์ DP๋ก ๋ฌธ์ ๋ฅผ ํ์ด์ผ ํ๋ค.
๋ฌธ์ ๋ฅผ ํ๊ธฐ ์ํด DP ๋ฐฐ์ด์ ๊ตฌ์ฑํ๋ค๋ฉด ์์ ๊ฐ์ ๊ท์น์ ๊ฐ์ง์ ์ ์ ์๋ค. ์๋ฅผ ๋ค์ด N์ด 4๋ผ๋ฉด 1, 2, 3์ผ๋ก ๊ตฌํ ์ ์๋ ๊ฒฝ์ฐ๋ ๋ค์๊ณผ ๊ฐ๋ค. 1์ ๊ฒฝ์ฐ ๋ชจ๋ 1๊ฐ์ง์ด๋ค. 2์ ๊ฒฝ์ฐ 1์ ๊ฒฝ์ฐ์ ์ + ์์์ ๊ตฌํ ๊ฒฝ์ฐ์ ์๊ฐ ๋์ ๋๋ค. 3์ ๊ฒฝ์ฐ๋ 2์ ๊ฒฝ์ฐ์ ์๋ฅผ ๊ตฌํ ํ์ ์์ ๊ฒฝ์ฐ์ ์๋ฅผ ๋์ ํ์ฌ ๊ตฌํ ์ ์๋ค.
- ์ฌ์ฉํ๋ ์๊ฐ 2์ด๊ณ ๊ตฌํ๋ ์๊ฐ 2์ธ ๊ฒฝ์ฐ
- 1๋ก ๊ตฌํ ์ ์๋ ๊ฒฝ์ฐ์ ์๋ 1์ด๋ค.
- ์ด๋ก ๊ตฌํ ์ ์๋ ๊ฒฝ์ฐ์ ์๋ 1์ด๋ค. ๋ฐ๋ผ์ 2๊ฐ ๋๋ค.
- ์ฌ์ฉํ๋ ์๊ฐ 2์ด๊ณ ๊ตฌํ๋ ์๊ฐ 4์ธ ๊ฒฝ์ฐ
- ์์ ๊ตฌํ 2๋ฅผ ๊ตฌํ ์ ์๋ ๊ฒฝ์ฐ์ ์๋ 2์ด๊ณ , 1๋ก ๊ตฌํ ์ ์๋ ๊ฒฝ์ฐ๋ 1์ด๋ฏ๋ก 3์ด ๋๋ค.
๋ฐ๋ผ์ 2์ ๊ฒฝ์ฐ `dp[i] += dp[i - 2]`์ ๊ฐ์ ์ ํ์์ ์ธ์ธ ์ ์๊ณ , 3์ ๊ฒฝ์ฐ `dp[i] += dp[i - 3]`๊ณผ ๊ฐ์ ์ ํ์์ ์ธ์ธ ์ ์๋ค.
์ฝ๋
from sys import stdin
if __name__ == '__main__':
t = int(stdin.readline())
dp = [1] * 10001
for i in range(2, 10001):
dp[i] += dp[i - 2]
for i in range(3, 10001):
dp[i] += dp[i - 3]
for _ in range(t):
n = int(stdin.readline())
print(dp[n])
'๐จโ๐ป ์ฝ๋ฉํ ์คํธ > ๋ฐฑ์ค' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
๋ฐฑ์ค: 15991 1, 2, 3 ๋ํ๊ธฐ 6 (0) | 2020.09.29 |
---|---|
๋ฐฑ์ค: 15990 1, 2, 3 ๋ํ๊ธฐ 5 (0) | 2020.09.29 |
๋ฐฑ์ค: 12101 1, 2, 3 ๋ํ๊ธฐ 2 (0) | 2020.09.28 |
๋ฐฑ์ค: 14238 ์ถ๊ทผ ๊ธฐ๋ก (0) | 2020.09.27 |
๋ฐฑ์ค: 11060 ์ ํ ์ ํ (0) | 2020.09.27 |