![11. [Java] DP (Dynamic Programming : 동적 계획법)](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbt442S%2FbtsMvLP5F24%2Fr4wYRRrMFWA91QVVkWncKK%2Fimg.png)
11. [Java] DP (Dynamic Programming : 동적 계획법)CS/알고리즘2025. 2. 25. 21:02
DP (Dynamic Programming : 동적 계획법)
- N-a번째 답(값)을 이용하여 N번째 답을 구하는 알고리즘
- Memoization
한 번 구한 값을 배열 등에 저장(메모)해두고, 다음에 같은 값이 필요하면 메모해 둔 값을 사용하는 것으로 시간적 효율성을 증가시킨다. - 일반적으로 N번째 답(값)을 구하기 위해 기존에 구해둔 N-a번째 답(값)을 사용하므로, 초기값은 직접 구해서 세팅하는 경우가 많다.
- 주로 For문과 DP값을 저장하는 배열로 구현하며 재귀함수로 구현하기도 한다.
📌 DP 접근 방법
- N-1번째 혹은 N-2번째 답(값)을 이용하여 N번째 답(값)을 구할 수 있을까 고민해본다.
- 경우의 수 구하는 문제가 DP문제인 경우가 상당히 많다.
- 일종의 점화식을 이용해서, 초기값 1번째 혹은 2번째 값까지는 직접 세팅하고, 이후 i번째 값들은 i-1 혹은 i-2번째 값을 이용하여 구한다.
- 따라서, 초기값 세팅과 점화식을 작성하는 것이 포인트이다.
📝 DP 예시 (피보나치 수열 구하기)

위와 같이 재귀함수로 피보나치 수열을 구하게 되면, 동일한 연산이 반복됨을 알 수 있다.
DP의 핵심은 동일한 계산을 다시 하지 않는 것에 있다.
대표적인 DP 문제
거스름돈 문제
배낭 문제
타일링
플로딩드-워셜 (최단 거리)
'CS > 알고리즘' 카테고리의 다른 글
12. [Java] 투 포인터 (2-Pointer) (0) | 2025.03.21 |
---|---|
10. [Java] Backtracking (퇴각 검색) (1) | 2025.02.25 |
9. [Java] DFS (깊이 우선 탐색) (0) | 2025.02.21 |
8. [Java] 그래프 기초 / BFS (너비 우선 탐색) (0) | 2025.02.19 |
@킴준현 :: 차근차근 꾸준히
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!