def DFS(n):
#메모이제이션
if dp[n] > 0:
return dp[n]
if n == 1 or n == 2:
return n
else:
dp[n]= DFS(n-1)+DFS(n-2)
return dp[n]
if __name__ =="__main__":
n = int(input())
dp = [0] * (n+1)
print(DFS(n))
- Top-Down 방식은 재귀와 메모이제이션 방식을 사용해서 진행한다.
- 재귀는 말그대로 본인을 호출하는 것을 의미하고 메모이제이션은 해당 재귀가 한 번이라도 호출되었다면 어딘가에 메모해두고 이를 다시 사용하지 않는 방식을 의미한다.
- 위의 코드에서 if dp[n] > 0: 이 한 번 호출되었던 경우를 의미한다.
'자료구조와 알고리즘 > 개인적인 코딩테스트 관련 풀이' 카테고리의 다른 글
[자료구조] - Linked List (0) | 2023.04.20 |
---|---|
[동적 계획법][Bottom-Up] - 최대 부분 증가 수열 (0) | 2022.08.16 |
[동적 계획법][Bottom-Up] - 네트워크 선 자르기 (0) | 2022.08.16 |
[DFS][조합] - 수들의 조합 (0) | 2022.08.06 |
[BFS] - 섬나라 아일랜드 (0) | 2022.08.05 |