[파이썬/python] 백준 - 10425 피보나치 인버스

2025. 2. 6. 18:32·알고리즘
반응형

문제

https://www.acmicpc.net/problem/10425


문제 설명

  1. n번째 피보나치 수 $F_n$이 주어진다.
  2. $F_n$이 몇 번째 피보나치 수인지 구한다.
    1. 이 때 가능한 경우가 여러 개라면 가장 큰 인덱스를 출력한다.

 


풀이

  1. $F_n$의 최댓값이 $10^{21000}$ 이므로 10**21000까지의 피보나치 수를 구한다.
  2. 이분탐색을 통해 mid 인덱스의 피보나치 수와 $F_n$을 비교한다.
    1. fibo[mid]가 $F_n$보다 작다면 s = mid 크거나 같다면 e = mid로 바꾸어 범위를 줄인다.
  3. 마지막으로 나온 값(인덱스)을 출력한다.

코드

import sys
input = sys.stdin.readline

fibo = [0,1,1,2,3]
MAX = (10**21000)
num = 0
while num <= MAX:
    num = fibo[-1] + fibo[-2]
    fibo.append(num)



for tc in range(int(input())):
    n = int(input())
    s = 0
    e = len(fibo) + 1
    while s+1 < e:
        mid = (s + e) //2
        if fibo[mid] < n:
            s = mid
        else:
            e = mid
    if e == 1:
        e = 2
    print(e)

시간복잡도

  • $10^{21000}$까지의 피보나치수를 구하는데 시간복잡도는 약 $O(10^5)$
  • 이분탐색의 시간복잡도는 $O(log_N)$
  • 최악의 경우 $N = 10^{12}$이므로 약 $O(10^5 + 40)$의 시간복잡도를 가진다.
반응형

'알고리즘' 카테고리의 다른 글

[파이썬/python] 백준 - 12934 턴 게임  (0) 2025.06.25
[파이썬/python] 백준 - 10844 쉬운 계단 수  (0) 2025.02.07
[파이썬/python] 백준 - 15801 풍선 공장  (0) 2025.02.05
[파이썬/python] 백준 - 15965 K번째 소수  (1) 2025.02.04
[파이썬/python] 백준 19699 - 소-난다!  (0) 2025.02.03
'알고리즘' 카테고리의 다른 글
  • [파이썬/python] 백준 - 12934 턴 게임
  • [파이썬/python] 백준 - 10844 쉬운 계단 수
  • [파이썬/python] 백준 - 15801 풍선 공장
  • [파이썬/python] 백준 - 15965 K번째 소수
개골개굴
개골개굴
굶고 코딩하기
  • 개골개굴
    밥스토리
    개골개굴
  • 전체
    오늘
    어제
  • 글쓰기 관리
    • 분류 전체보기 (144)
      • 알고리즘 (124)
      • Java (2)
      • 자기개발 (18)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    백준
    Redis
    SMTP
    async
    파이썬
    completablefuture
    인프런
    python
    springboot
    java
    컴퓨터구조
    OS
    알고리즘
    작심삼일 챌린지
    컴퓨터 구조
  • 최근 댓글

  • 반응형
  • hELLO· Designed By정상우.v4.10.0
개골개굴
[파이썬/python] 백준 - 10425 피보나치 인버스
상단으로

티스토리툴바