BOJ 1003. 피보나치 함수 (Python)

2025. 8. 14. 01:32·BOJ

문제

BOJ 1003

 

내가 생각한 풀이

fibonacci(N)을 호출했을 때, 0과 1이 몇 번 출력되는지 구하는 프로그램.

 

fibonacci(0)과 fibonacci(1)이 몇 번 수행되는지 구하는 프로그램인데 시간 제한이 0.25초라서 일반적인 풀이로는 시간초과가 난다.

DP를 사용하면 짧은 시간 내에 풀 수 있음.

dp[0]은 fibonacci(0)을 호출할 때 fibonacci(0) 과 fibonacci(1)이 수행될 횟수 => (1, 0)

dp[1]은 fibonacci(1)을 호출할 때 fibonacci(0) 과 fibonacci(1)이 수행될 횟수 => (0, 1)

dp[2]는 fibonacci(2)를 호출할 때 fibonacci(0) 과 fibonacci(1)이 수행될 횟수 => (1, 1), fibo(1) + fibo(0)

dp[3]은 fibonacci(3)을 호출할 때 fibonacci(0) 과 fibonacci(1)이 수행될 횟수 => (1, 2), fibo(2) + fibo(1)

dp[4]는 fibonacci(4)를 호출할 때 fibonacci(0) 과 fibonacci(1)이 수행될 횟수 => (2, 3), fibo(3) + fibo(2)

 

테이블 정의

dp는 dp[i-1] + dp[i-2]

점화식

dp[i] = tuple(dp[i-1][0] + dp[i-2][0], dp[i-1][1] + dp[i-2][1])

 

코드 (Python)

import sys
input = sys.stdin.readline

T = int(input().strip())

dp = [(1, 0), (0, 1)]
for i in range(2, 41):
    a0, a1 = dp[i-1]
    b0, b1 = dp[i-2]
    dp.append((a0 + b0, a1 + b1))

for _ in range(T):
    n = int(input().strip())
    print(*dp[n])

'BOJ' 카테고리의 다른 글

BOJ 17219. 비밀번호 찾기 (Python)  (0) 2025.08.13
BOJ 11399. ATM (Python)  (0) 2025.08.13
'BOJ' 카테고리의 다른 글
  • BOJ 17219. 비밀번호 찾기 (Python)
  • BOJ 11399. ATM (Python)
rubato.dev
rubato.dev
  • rubato.dev
    rubato.dev
    rubato.dev
  • 전체
    오늘
    어제
    • 분류 전체보기 (5) N
      • BOJ (3) N
      • 알고리즘 (0)
      • TIL (2)
      • Project (0)
  • 인기 글

  • 태그

    BOJ
    TIL
    js
    PYTHON
    CSS
  • 최근 글

  • hELLO· Designed By정상우.v4.10.4
rubato.dev
BOJ 1003. 피보나치 함수 (Python)
상단으로

티스토리툴바