์ ๋ ฅ
์ฒซ ๋ฒ์งธ ์ค์ ์์ฐ์ N์ด ์ฃผ์ด์ง๋ค. (1 ≤ N ≤ 1,000,000)
์ถ๋ ฅ
์ฒซ ๋ฒ์งธ ์ค์ ์ง์์ด๊ฐ ๋ง๋ค ์ ์๋ ๊ธธ์ด๊ฐ N์ธ ๋ชจ๋ 2์ง ์์ด์ ๊ฐ์๋ฅผ 15746์ผ๋ก ๋๋ ๋๋จธ์ง๋ฅผ ์ถ๋ ฅํ๋ค.
ํด๊ฒฐ ๋ฐฉ๋ฒ
์ธ๋ป๋ณด๋ฉด ์ด๋ ค์ ๋ณด์ผ ์ ์๋ค. ํ์ง๋ง ํ์ผ์ ๊ฒฝ์ฐ์ ์์๋ ๊ท์น์ด ์๋ค.
N |
1 | 2 | 3 | 4 | 5 | 6 | 7 |
2์ง ์์ด์ ๊ฒฝ์ฐ์ ์ |
1 | 2 | 3 | 5 | 8 | 13 | 21 |
ํผ๋ณด๋์น์ ๊ฐ์ ์ ํ์์ ๊ฐ์ง๋ค. f(n) = f(n-1) + f(n-2)
ํ์ง๋ง ์ฃผ์ํ ์ ์ด ์๊ฐ ์ ํ์ด 0.75์ด์ 256MB์ ๋ฉ๋ชจ๋ฆฌ๋ผ๋ ์ ์ด๋ค.
์ฌ๊ท๋ฅผ ์ฌ์ฉํ๋ฉด ์ ๋ ํต๊ณผํ ์ ์๋ ๋ฌธ์ ๋ผ๋ ๋ป์ด๋ค.
ํด๊ฒฐ ๊ณผ์
๋๋ ์ฒซ๋ฒ์งธ ์๋์์ ๋ฉ๋ชจ๋ฆฌ ์ด๊ณผ๊ฐ ๋์์๋ค.
dp๋ก ๊ตฌํํ๊ธฐ์ ๋ฌด์กฐ๊ฑด ํต๊ณผ๋ผ๊ณ ์๊ฐํ๋๋ฐ ๋ฉ๋ชจ๋ฆฌ ์ด๊ณผ๊ฐ ๋์์ ๋นํฉํ๋ค.
๋ฌธ์ ๋ฅผ ๋ค์ ์ดํด๋ณธ ๊ฒฐ๊ณผ
์ฒซ ๋ฒ์งธ ์ค์ ์ง์์ด๊ฐ ๋ง๋ค ์ ์๋ ๊ธธ์ด๊ฐ N์ธ ๋ชจ๋ 2์ง ์์ด์ ๊ฐ์๋ฅผ 15746์ผ๋ก ๋๋ ๋๋จธ์ง๋ฅผ ์ถ๋ ฅํ๋ค.
์ด๊ฒ ํต์ฌ์ด์๋ค.
dp ๋ฐฐ์ด์ 15746์ผ๋ก ๋๋ ๋๋จธ์ง๋ฅผ ๋ฃ์ด์ค์ผ๋ก์จ 15745 ์ดํ์ ๊ฐ๋ค๋ง ์ด์ฉํ๊ณ ์ด ๊ณผ์ ์ผ๋ก ์ฐ์ฐ ๊ณผ์ ์์ ๋ฉ๋ชจ๋ฆฌ ์๋ชจ๋ฅผ ์ค์ด๋ ๊ฒ์ด์๋ค.
'%15746' ์ฝ๋๋ฅผ ์ถ๊ฐํ์๋๋ ๋ฐ๋ก ํต๊ณผํ์๋ค.
์ต์ข ์ฝ๋๋
def main():
n = int(input())
number = [0]*1000001
if n == 1:
print(1)
elif n == 2:
print(2)
else:
number[1] = 1
number[2] = 2
for i in range(3, n+1):
number[i] = (number[i-1] + number[i-2])%15746
print(number[n])
if __name__ == "__main__":
main()
'โ๏ธ ์ฝํ ์ค๋น > Dynamic Programming' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[๋์ ๊ณํ๋ฒ 1] [C++] 1932๋ฒ. ์ ์ ์ผ๊ฐํ (0) | 2021.01.13 |
---|---|
[๋์ ๊ณํ๋ฒ 1] [C++] 1149๋ฒ. RGB ๊ฑฐ๋ฆฌ (0) | 2021.01.13 |
[๋์ ๊ณํ๋ฒ 1] [C++] 9461๋ฒ. ํ๋๋ฐ ์์ด (0) | 2021.01.13 |
[๋์ ๊ณํ๋ฒ 1] [Python] 9184๋ฒ. ์ ๋๋ ํจ์ ์คํ (0) | 2021.01.12 |
[๋์ ๊ณํ๋ฒ 1] [Python] 1003๋ฒ. ํผ๋ณด๋์น ํจ์ (0) | 2021.01.12 |