728x90
๋ฌธ์
ํ์ด
๋ถํ ์ ๋ณต์ ์ด์ฉํ ๊ฑฐ๋ญ์ ๊ณฑ์ด๋ฏ๋ก ํผ๋ณด๋์น ์๋ฅผ ์ ๊ณฑ์ ํํ๋ก ๋ง๋ค๋ ค๊ณ ๋ ธ๋ ฅํ๋ค.
๋ ธํธ์ ๋์ ์ด๋ค๊ฐ ์ฐ์ฐํ ๊ท์น ๋ฐ๊ฒฌ!!
n % 2 == 0 ์ธ ๊ฒฝ์ฐ
Fn = F(n//2+1) ** 2 - F(n//2-1) ** 2
n%2 == 1 ์ธ ๊ฒฝ์ฐ
Fn = F(n//2+1) ** 2 + F(n//2) ** 2
๋ฉ๋ชจ์ ์ด์ ๋ ํ์ฉํด์ผ ์๊ฐ ์ด๊ณผ๊ฐ ๋์ง ์๋๋ค.
์ฝ๋
dp = dict()
def fibo(n):
if dp.get(n) != None:
return dp[n]
if n == 0:
return 0
if n == 1 or n == 2:
return 1
if n % 2 == 0:
dp[n // 2 + 1] = fibo(n // 2 + 1) % 1000000007 # ๋งจ ์ฒ์์๋ % 1000000007์ ํด์ฃผ์ง ์์ ์๊ฐ์ด๊ณผ๊ฐ ๋ฌ์๋ค..
dp[n // 2 - 1] = fibo(n // 2 - 1) % 1000000007
return dp[n // 2 + 1] ** 2 - dp[n // 2 - 1] ** 2
else:
dp[n // 2 + 1] = fibo(n // 2 + 1) % 1000000007
dp[n // 2] = fibo(n // 2) % 1000000007
return dp[n // 2 + 1] ** 2 + dp[n // 2] ** 2
print(fibo(int(input())) % 1000000007)
๋ง๋ฌด๋ฆฌ
์ํ๊ณผ ๊ด๋ จ๋ ๋ฌธ์ ๋ผ ๋ฐ๋ก ํด๋ต์ ์ฐพ์๋ณผ๊น ๊ณ ๋ฏผํ์ง๋ง... ๊ณ ๋ฏผํ๋ค ๋ณด๋ ํผ์ ํ์ผ๋ก ํ ์ ์์๋ค!!
728x90