https://www.acmicpc.net/problem/10826
10826번: 피보나치 수 4
피보나치 수는 0과 1로 시작한다. 0번째 피보나치 수는 0이고, 1번째 피보나치 수는 1이다. 그 다음 2번째 부터는 바로 앞 두 피보나치 수의 합이 된다. 이를 식으로 써보면 Fn = Fn-1 + Fn-2 (n ≥ 2)가
www.acmicpc.net

문제 해석
피보나치 수열의 n번째 항의 값을 출력한다.
코드
import sys
from collections import deque
input = sys.stdin.readline
fibolist = deque([0, 1, 1])
n = int(input())
if n != 0:
for i in range(3, n+1):
fibolist.append(fibolist[-1] + fibolist[-2])
fibolist.popleft()
print(fibolist[-1])
else:
print(0)
문제 풀이
아주아주 간단한 다이나믹 프로그래밍 문제다.
리스트를 만들어 0번째, 1번째, 2번째 항의 값을 미리 저장한다.
이후 3번째 항부터 n번째 항까지의 점화식을 반복해 리스트에 저장하고, 0번째 인덱스의 요소를 제거한다.
그 후 리스트의 -1번째 인덱스의 값이 n번째 피보나치 수열의 값이므로 이를 출력하면 된다.
(이처럼 다이나믹 프로그래밍에서 계산한 값을 저장해 놓는 것을 메모이제이션이라 하며, 계산속도를 증가시킬 수 있다.)
(덱을 적절히 쓰면 메모이제이션으로 인한 메모리 증가를 획기적으로 줄일 수 있다.)
('피보나치 수' 시리즈이며, 브론즈와 실버급 '피보나치 수' 까지는 이 코드를 그대로 복붙해 제출해도 맞는다.)
'백준' 카테고리의 다른 글
[BOJ/python] 14651번 걷다보니 신천역 삼 (Large) (0) | 2022.10.22 |
---|---|
[BOJ/python] 1676번 팩토리얼 0의 개수 (0) | 2022.10.05 |
[BOJ/python] 14729번 칠무해 (0) | 2022.09.26 |
[BOJ/python?] 18825번 눈치게임 A+B! A-B! A+B! 터렛! A+B! 피보나치 함수! A+B! A-B! A+B! 어린 왕자! A+B! ACM Craft! A+B! A-B! A+B! 습격자 초라기! A+B! 벡터 매칭! A+B! A-B! A+B! A/B! A+B! 터렛! A+B! A-B! A+B! 분산처리! A+B!.. (1) | 2022.09.25 |
[BOJ/pypy] 25603번 짱해커 이동식 (0) | 2022.09.21 |