[Gold II] Title: 피보나치 수 6, Time: 60 ms, Memory: 34924 KB -BaekjoonHub
This commit is contained in:
36
백준/Gold/11444. 피보나치 수 6/README.md
Normal file
36
백준/Gold/11444. 피보나치 수 6/README.md
Normal file
@@ -0,0 +1,36 @@
|
||||
# [Gold II] 피보나치 수 6 - 11444
|
||||
|
||||
[문제 링크](https://www.acmicpc.net/problem/11444)
|
||||
|
||||
### 성능 요약
|
||||
|
||||
메모리: 34924 KB, 시간: 60 ms
|
||||
|
||||
### 분류
|
||||
|
||||
분할 정복을 이용한 거듭제곱, 수학
|
||||
|
||||
### 제출 일자
|
||||
|
||||
2025년 3월 19일 13:39:41
|
||||
|
||||
### 문제 설명
|
||||
|
||||
<p>피보나치 수는 0과 1로 시작한다. 0번째 피보나치 수는 0이고, 1번째 피보나치 수는 1이다. 그 다음 2번째 부터는 바로 앞 두 피보나치 수의 합이 된다.</p>
|
||||
|
||||
<p>이를 식으로 써보면 F<sub>n</sub> = F<sub>n-1</sub> + F<sub>n-2</sub> (n ≥ 2)가 된다.</p>
|
||||
|
||||
<p>n=17일때 까지 피보나치 수를 써보면 다음과 같다.</p>
|
||||
|
||||
<p>0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610, 987, 1597</p>
|
||||
|
||||
<p>n이 주어졌을 때, n번째 피보나치 수를 구하는 프로그램을 작성하시오.</p>
|
||||
|
||||
### 입력
|
||||
|
||||
<p>첫째 줄에 n이 주어진다. n은 1,000,000,000,000,000,000보다 작거나 같은 자연수이다.</p>
|
||||
|
||||
### 출력
|
||||
|
||||
<p>첫째 줄에 n번째 피보나치 수를 1,000,000,007으로 나눈 나머지를 출력한다.</p>
|
||||
|
||||
34
백준/Gold/11444. 피보나치 수 6/피보나치 수 6.py
Normal file
34
백준/Gold/11444. 피보나치 수 6/피보나치 수 6.py
Normal file
@@ -0,0 +1,34 @@
|
||||
from sys import stdin
|
||||
from collections import defaultdict
|
||||
|
||||
input = stdin.readline
|
||||
|
||||
MOD = 1000000007
|
||||
|
||||
dp = defaultdict(int)
|
||||
|
||||
dp[0] = 0
|
||||
dp[1] = 1
|
||||
dp[2] = 1
|
||||
|
||||
|
||||
def fibonacci(n):
|
||||
if not dp[n]:
|
||||
if n & 1:
|
||||
fn = fibonacci(n // 2)
|
||||
fnp = fibonacci(n // 2 + 1)
|
||||
|
||||
dp[n] = (fn ** 2 + fnp ** 2) % MOD
|
||||
else:
|
||||
fn = fibonacci(n // 2)
|
||||
fnm = fibonacci(n // 2 - 1)
|
||||
|
||||
dp[n] = (fn * (fn + 2 * fnm)) % MOD
|
||||
|
||||
return dp[n]
|
||||
|
||||
N = int(input())
|
||||
|
||||
fibonacci(N)
|
||||
|
||||
print(dp[N])
|
||||
Reference in New Issue
Block a user