라이브 코테에서 자주 나오는 문제라고 하니 외울정도로 해가기

솔루션 코드
class Solution:
global arr
arr = [0] * 31
def fib(self, n: int) -> int:
arr[0], arr[1] = 0, 1
for i in range(2, n+1):
arr[i] = arr[i-2] + arr[i-1]
return arr[n]

솔루션 코드
- 2번) 메모이제이션 (top-down)
- 위에서부터 최고끝까지 내려간 후 하나씩 계산해 올라가되, 이미 있는 값은 계산X
class Solution:
global arr
arr = [0] * 31
def fib(self, n: int) -> int:
if n <= 1:
return n
if arr[n] != 0:
return arr[n]
arr[n] = self.fib(n-1) + self.fib(n-2)
return arr[n]

솔루션 코드
- 3번) <중요> 두 변수만 이용해 공간 절약
- 시간복잡도는 O(n)으로 동일, 공간복잡도는 O(1)
class Solution:
def fib(self, n: int) -> int:
x, y = 0, 1
for i in range(0, n):
x, y = y, x + y
return x
