Today
Total
«   2026/01   »
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
관리 메뉴

기억은 짧고 기록은 길다

[프로그래머스/Programmers] 피보나치 수 - Python 본문

CodingTest/programmers

[프로그래머스/Programmers] 피보나치 수 - Python

ukunV 2021. 9. 23. 14:36

Link

 

코딩테스트 연습 - 피보나치 수

피보나치 수는 F(0) = 0, F(1) = 1일 때, 1 이상의 n에 대하여 F(n) = F(n-1) + F(n-2) 가 적용되는 수 입니다. 예를들어 F(2) = F(0) + F(1) = 0 + 1 = 1 F(3) = F(1) + F(2) = 1 + 1 = 2 F(4) = F(2) + F(3) = 1 + 2 = 3 F(5) = F(3) + F(4) =

programmers.co.kr

 

Solution

필자는 해당 문제를 메모이제이션을 활용하여 해결하였다.

하지만 채점에서 몇개가 런타임에러가 발생하여 테스트 케이스에 100000을 추가해보았고 그 결과 재귀함수의 최대 재귀한도 깊이가 초과(RecursionError: maximum recursion depth exceeded in comparison)한다는 것을 파악하였다. 이에 sys.setrecurtionlimit()을 활용해 재귀한도를 늘려주어 해당 문제점을 해결하였다.

import sys
sys.setrecursionlimit(150000)

def fibo(n, arr):
    if n in [1, 2]:
        return 1

    if arr[n] != 0:
        return arr[n]
    else:
        arr[n] = fibo(n - 1, arr) + fibo(n - 2, arr)
        return arr[n]

def solution(n):
    if n in [1, 2]:
        return 1

    d = [0] * (n + 1)
    d[1] = 1
    d[2] = 1

    fibo(n, d)

    return d[n] % 1234567
🔑 key point: Dynamic Programming, Memoization
📌 Tip: sys.setrecursionlimit()

 

Other Solution

def solution(n):
    fibo = [0, 1]

    for i in range(2, n + 1):
        fibo.append((fibo[i - 2] + fibo[i - 1]) % 1234567)

    return fibo[-1]
🔑 key point: fibo[i - 2] + fibo[i - 1]
Comments