-풀이
def solution(n):
first, second = 0, 1
for _ in range(n):
first, second = second, first + second
return first%1234567
-풀이 설명
피보나치 수를 들어는 봤는데 어떤식으로 사용하는지 몰라서 어느정도 공식 느낌으로 있을 것 같아서 20분 정도 고민 후 구글링하여 피보나치를 나타내는 법을 참고하여 풀게 되었다. 피보나치 수를 구하는 방법은 반복문 ,제네레이터, 재귀 함수, 메모이제이션 등이 있었는데, 재귀 함수는 코드는 간결하고 보기 좋지만 재귀 함수의 단점은 n이 증가하면 시간 복잡도(O(2n))가 가파르게 증가한다는 점이다. 그래서 이러한 문제를 해결하기 위해 메모이제이션을 많이 사용한다고 한다. 메모이제이션은 이전에 계산한 값을 저장해서 중복된 계산을 피하는 방법이다.
from functools import lru_cache
@lru_cache(maxsize=None)
functools의 lru_cache를 통해 간단하게 메모이제이션을 구현할 수 있다.
간단하게 @lru_cache 데코레이터를 추가해서 이미 연산된 값을 모두 저장한다.
그래서 웬만하면 풀이에 올린 코드처럼 직관적이면서 가장 효율적인 방법인 반복문을 사용하여 피보나치 수를 자주 활용해봐야겠다.
'알고리즘' 카테고리의 다른 글
[프로그래머스][level 2]최댓값과 최솟값 (0) | 2021.10.14 |
---|---|
[프로그래머스][level 2]최솟값 만들기(zip(),sort()함수 사용) (0) | 2021.10.14 |
[프로그래머스][level 2]행렬의 곱셈 (0) | 2021.10.13 |
[프로그래머스][level 2]JadenCase 문자열 만들기 (0) | 2021.10.13 |
[프로그래머스][level 2]N개의 최소공배수 (0) | 2021.10.12 |