Dynamic Programming 이란? 복잡한 문제를 더 간단한 하위 문제의 모음으로 쪼개서 각 하위 문제들을 풀어서 그 답을 저장하는 방식으로 문제를 푸는 것 대부분의 문제에 적용할 수 있는 것은 아니지만 사용할 수 있는 경우에는 코드의 속도를 많이 향상시켜준다. => 최적의 해답을 찾아내는 것 Dynamic Programming 을 사용하기 위한 전제 조건 1. 최적 부분 구조가 존재하는가 2. 반복되는 하위 문제가 있는가 반복되는 하위 문제란? 한 문제를 더 작은 문제들로 나눌 수 있고, 그 조각들 중 일부가 재활용 가능하다는 말. ex) Fibonacci Sequence // Big O : O(2^n) function fib(n) { if (n B -> C -> D 가 아닐 수 있다는 것. D..