Dynamic Programming Algorithm 다이나믹 프로그래밍 큰 문제를 작게 나누고, 같은 문제라면 한 번씩만 풀어 문제를 효율적으로 해결하는 알고리즘 기법이다. 기본적으로 아래의 조건을 만족할 때 사용할 수 있다. 큰 문제를 작은 문제로 나눌 수 있다. 작은 문제에서 구한 정답은 그것을 포함하는 큰 문제에서도 동일하다. 이러한 조건을 만족하는 대표적인 문제로는 피보나치 수열이 있다. Top-down 피보나치 수열을 memoization 기법을 사용하여 해결해보자. 메모이제이션은 한 번 구한 결과를 메모리 공간에 저장해두고 같은 식을 다시 호출하면 저장해둔 결과를 그대로 가져오는 기법이다. 이렇듯 재귀 함수처럼 큰 문제를 해결하기 위해 작은 문제를 호출하는 것을 Top-down 방식이라고 한..