본문 바로가기

Algorithm & Data Structure

Dynamic Programming

728x90
반응형
import sys

n = sys.stdin.readline()
n = int(n)

#arr = list(map(int, input().split()))

dp = [0] * n
dp[0] = 1
dp[1] = 1


for i in range(2,n):
    dp[i] = (dp[i-1]+dp[i-2])

print(dp[n-1])

Bottom Up 방식으로 Dynamic Programming을 사용해서 간단하게 작성해본 피보나치 수열.

핵심 아이디어는 반복문을 사용할때 연산된 결과를 dp[]라는 배열에 값으로 저장하고 필요할때마다 불러서 연산을 한다.

즉 큰 문제를 해결하기 위해서 작은 문제로 쪼개서 해결하는 것이다.

재귀호출에 비해서 시간 복잡도에서 훨씬 유리하다. 이는 시간 복잡도가 O(N) 이고 재귀 호출은 O(N^2) 이다.

728x90
반응형

'Algorithm & Data Structure' 카테고리의 다른 글

백준 - 11053번  (0) 2022.01.17
백준 - 1904번  (0) 2022.01.17
백준 - 11053번  (0) 2022.01.16
백준 - 10844번  (0) 2022.01.13
백준 - 1018번  (0) 2022.01.13