DP: dynamic programming
미리 준비한 테이블을 통해 가장 작은 부분 문제를 먼저 풀고, 이미 해결한 부분 문제를 통해 상위 부분 문제를 풀어나가는 방식
세보나치 수열이란? F(1) = 1, F(2) = 2, F(3) = 3
F(n) = F(n-1) + F(n-2) + F(n-3), if n > 3
세보나치 수열은 다음과 같이 재귀적으로 정의한 수열이다.
F(1) = 1, F(2) = 2, F(3) = 3
F(n) = F(n-1) + F(n-2) + F(n-3), if n > 3
양의 정수 n이 주어졌을 때, n번째 세보나치 수열 F(n)을 출력하시오.
Input
첫째 줄에 양의 정수 n이 주어진다. 1<= n <= 100,000
4
6
100
Output
첫째 줄에 세보나치 수열의 n번째 항 F(n)을 출력한다.
6
230
151404293106684183601223222
# dp로 문제 해결 & 공간 복잡도 문제 해결
import sys
input=sys.stdin.readline
def sebo(n):
if n<4:
return n
else:
a, b, c = 1, 2, 3
for _ in range(4,n+1):
a, b, c = b, c, a+b+c
return c
n=int(input())
print(sebo(n))
'Problem Solving' 카테고리의 다른 글
[DP] 계단 오르기 (0) | 2022.12.14 |
---|---|
[DP] 이항 계수의 합 (0) | 2022.12.14 |
[Hash Table] 에너그램 정렬 (0) | 2022.12.13 |
[Hash Table] 수평선과 수직선 (0) | 2022.12.13 |
[Hash Table] 로마숫자의 소인수 (0) | 2022.12.13 |