반응형
코딩하기 전 생각하기
'''
메모이제이션을 활용하는 피보나치 재귀함수를 선언하자.
'''
코드
import sys
sys.setrecursionlimit(10**6)
memo = {}
def fib(n):
if n == 1:
return 1
if n == 2:
return 1
if n in memo:
return memo[n]
memo[n] = fib(n - 1) + fib(n - 2)
return memo[n]
n = int(input())
print(fib(n))
느낀점
이 문제를 통해서 메모이제이션이라는 개념에 대해서 알 수 있었다.
이 방식의 시간복잡도는 O(N)이다. 다음 링크를 참고하였다.
https://www.acmicpc.net/blog/view/28
피보나치 수를 구하는 여러가지 방법
피보나치 수는 다음과 같이 정의되는 수열입니다. $F_0 = 0$ $F_1 = 1$ $F_n = F_{n-1} + F_{n-2}$ 피보나치 수를 조금 써보면, 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, ... 와 같습니다. 피보나치 수를 구하는 함수
www.acmicpc.net
또한 파이썬에서 재귀 깊이에 따른 런타임 에러가 발생하여서 1, 2줄에 있는 코드를 추가하였다. 다음 링크를 참고하였다.
https://www.acmicpc.net/help/rte/RecursionError
런타임 에러 도움말 (RecursionError)
RecursionError RecursionError는 재귀와 관련된 에러입니다. 가장 많이 발생하는 이유는 Python이 정한 최대 재귀 깊이보다 재귀의 깊이가 더 깊어질 때입니다. Python이 정한 최대 재귀 깊이는 sys.getrecursion
www.acmicpc.net
정말 유익한 문제다.
(주의) 기록용으로 작성한 글입니다. 코드가 허접하거나 알고리즘의 효율이 낮을 수 있습니다.
댓글 환영합니다!
반응형
'Algorithm > Baekjoon' 카테고리의 다른 글
[백준/BOJ] 2846번 - 오르막길 (C++) (0) | 2021.07.24 |
---|---|
[백준/BOJ] 10250번 - ACM 호텔 (C++) (0) | 2021.07.24 |
[백준/BOJ] 16435번 - 스네이크버드 (C++) (0) | 2021.07.23 |
[백준/BOJ] 1541번 - 잃어버린 괄호 (C++) (0) | 2021.07.23 |
[백준/BOJ] 11047번 - 동전 0 (C++) (0) | 2021.07.20 |
댓글