[백준2749] / 피보나치 수 3 - 분할정복, 거듭제곱, DP (feat. 피사노 주기)

2024. 10. 2. 16:25·Programming/Algorithm

백준2749

 

푼 날짜 : 2024.10.01

푼 문제 : [2749] / 피보나치 수 3

사용한 언어 : python

알고리즘 : 분할정복, 거듭제곱, DP

 

 

푼 방법 : 

n의 범위를 잘 확인해야 한다. 값의 범위가 1000000000000000000 까지 가능하므로 메모리 초과가 날 가능성을 대비해야 한다!

다행히 출력 시에는 1000000으로 나눈 나머지를 출력한다.

 

요기서 뽀인트🌟🌟

 

피사노 주기(Pisano Period)에 대해 알고 계신가요?

 

 

전 이 문제를 풀면서 알게 되었답니다. ദ്ദി・ᴗ・)✧

 

 

피사노 주기란 ?

피보나치 수를 K로 나눈 나머지의 주기를 의미한다!

일정 주기가 반복되므로 해당 주기를 사용해 문제를 풀면 된다.

 

 

그래서 주기는 어떻게 구하는데 ?

mod = 10^k 일 때, k > 2 라면, 주기는 항상 15 × 10^(k-1) 이다.

 

라고 한다.

 

 

따라서 이 문제에서는 10^6(파이썬의 경우 10**6)으로 나누기 때문에 공식에 넣는다면 

mod = 10**6

반복 주기 p =15 * 10**5가 된다.

 

따라서 전체를 다 계산할 필요 없이, 반복 주기에 해당 하는 값을 구하여 해당 값을 찾아내면 된다!

 

 

코드 :

import sys

N = int(sys.stdin.readline())
dp = {}
dp[0] = 0
dp[1] = 1

mod = 10**6
p = mod//10*15  #위 공식 순서대로 작성하면 15*10**(6-1)로 작성 가능

for i in range(2, p):
    dp[i] = (dp[i-2]+dp[i-1])%mod

print(dp[N%p])

 

 

참고링크 :

https://www.acmicpc.net/blog/view/28

 

 

헤헤 몰랐던 걸 알게 되었다!!! 

오늘도 지식 += 1 

 

'Programming > Algorithm' 카테고리의 다른 글

[백준14501] / 퇴사 - DP  (2) 2024.10.08
[백준2491] / 수열 - DP  (1) 2024.10.02
[백준11659] / 구간 합 구하기 4 - 누적합  (2) 2024.09.26
[백준11055] / 가장 큰 증가하는 부분 수열 - DP  (0) 2024.09.21
[백준9465] / 스티커 - DP  (1) 2024.09.14
'Programming/Algorithm' 카테고리의 다른 글
  • [백준14501] / 퇴사 - DP
  • [백준2491] / 수열 - DP
  • [백준11659] / 구간 합 구하기 4 - 누적합
  • [백준11055] / 가장 큰 증가하는 부분 수열 - DP
__narrrrrmm
__narrrrrmm
__narrrrrmm
낢
__narrrrrmm
글쓰기 관리
전체
오늘
어제
  • 분류 전체보기 (71)
    • Programming (68)
      • Algorithm (61)
      • React JS (2)
      • SQL (5)
    • 낢의 하루 (1)
    • 대외활동 (1)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

백트레킹
컬럼별칭
BFS
최소스패닝트리
파이썬
프로그래머스
PCCP
누적합
알고리즘
백트래킹
그래프
Dijkstra
mysql
DFS
Javascript
MST
DP
StarRating
투포인터
heic
백준
삼성 금융아카데미
Python
SQL
다익스트라
다이나믹프로그래밍
React.js
웹동아리
그래프탐색
파싱
hELLO· Designed By정상우.v4.5.3
__narrrrrmm
[백준2749] / 피보나치 수 3 - 분할정복, 거듭제곱, DP (feat. 피사노 주기)
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.