Dynamic Programming (동적 계획법) - 큰 문제를 작은 문제로 나누어 결과를 저장하여 다시 큰 문제를 해결하는 방법 (기억하며 풀기!)
DP를 사용하는 이유 - 일반적인 재귀를 사용하면 작은 문제들이 여러 번 반복되어 비효율적인 계산이 될 수 있다!
DP를 사용할 때
대표적인 DP 문제 - 피보나치 수열
피보나치 수열을 재귀함수로도 구현할 수 있음!
BUT 피보나치 수열을 단순 재귀함수로 구현하게 되면 n이 커질수록 수행 시간이 기하급수적으로 늘어남
DP 방법 중 한 종류
한 번 구한 결과를 메모리 공간에 메모한 후 같은 식을 호출하면 메모한 결과를 그대로 가져오는 기법
색칠된 노드만 방문하면 됨!
DP 문제를 푸는 방법 - 탑다운(Top-Down) vs 바텀업(Bottom-Up)