From 8c93da0269a133861e45bcacce9881205841e2f2 Mon Sep 17 00:00:00 2001 From: SSUM <116950962+ssum21@users.noreply.github.com> Date: Wed, 19 Mar 2025 13:40:11 +0900 Subject: [PATCH] =?UTF-8?q?[Gold=20II]=20Title:=20=ED=94=BC=EB=B3=B4?= =?UTF-8?q?=EB=82=98=EC=B9=98=20=EC=88=98=206,=20Time:=2060=20ms,=20Memory?= =?UTF-8?q?:=2034924=20KB=20-BaekjoonHub?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- 백준/Gold/11444. 피보나치 수 6/README.md | 36 +++++++++++++++++++ .../Gold/11444. 피보나치 수 6/피보나치 수 6.py | 34 ++++++++++++++++++ 2 files changed, 70 insertions(+) create mode 100644 백준/Gold/11444. 피보나치 수 6/README.md create mode 100644 백준/Gold/11444. 피보나치 수 6/피보나치 수 6.py diff --git a/백준/Gold/11444. 피보나치 수 6/README.md b/백준/Gold/11444. 피보나치 수 6/README.md new file mode 100644 index 0000000..c4aa7d5 --- /dev/null +++ b/백준/Gold/11444. 피보나치 수 6/README.md @@ -0,0 +1,36 @@ +# [Gold II] 피보나치 수 6 - 11444 + +[문제 링크](https://www.acmicpc.net/problem/11444) + +### 성능 요약 + +메모리: 34924 KB, 시간: 60 ms + +### 분류 + +분할 정복을 이용한 거듭제곱, 수학 + +### 제출 일자 + +2025년 3월 19일 13:39:41 + +### 문제 설명 + +

피보나치 수는 0과 1로 시작한다. 0번째 피보나치 수는 0이고, 1번째 피보나치 수는 1이다. 그 다음 2번째 부터는 바로 앞 두 피보나치 수의 합이 된다.

+ +

이를 식으로 써보면 Fn = Fn-1 + Fn-2 (n ≥ 2)가 된다.

+ +

n=17일때 까지 피보나치 수를 써보면 다음과 같다.

+ +

0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610, 987, 1597

+ +

n이 주어졌을 때, n번째 피보나치 수를 구하는 프로그램을 작성하시오.

+ +### 입력 + +

첫째 줄에 n이 주어진다. n은 1,000,000,000,000,000,000보다 작거나 같은 자연수이다.

+ +### 출력 + +

첫째 줄에 n번째 피보나치 수를 1,000,000,007으로 나눈 나머지를 출력한다.

+ diff --git a/백준/Gold/11444. 피보나치 수 6/피보나치 수 6.py b/백준/Gold/11444. 피보나치 수 6/피보나치 수 6.py new file mode 100644 index 0000000..337c550 --- /dev/null +++ b/백준/Gold/11444. 피보나치 수 6/피보나치 수 6.py @@ -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])