2025.01.13 - [Computer Science/자료구조 & 알고리즘] - [자료구조 & 알고리즘] 다이나믹 프로그래밍(Dynamic Programming) 이해하기
[자료구조 & 알고리즘] 다이나믹 프로그래밍(Dynamic Programming) 이해하기
다이나믹 프로그래밍(Dynamic Programming)이란?다이나믹 프로그래밍(Dynamic Programming, DP)은 복잡한 문제를 작은 하위 문제로 나누어 해결하고, 그 결과를 저장하여 동일한 문제를 반복적으로 계산하지
rnasterofmysea.tistory.com
📚 DP 문제 유형별 분류와 접근 방법
DP(동적 계획법)는 알고리즘 문제에서 자주 등장하는 중요한 주제입니다. 많은 문제들이 단순한 점화식부터 최적 경로, 부분 수열 탐색 등 다양한 유형으로 출제되는데요. 하단의 문제들을 통해 다이나믹 프로그래밍에 대한 기본 개념을 잡고 갈 수 있기 때문에 한번 해결하는 것이 나쁘지 않다고 생각합니다. 이번 포스트에서는 BaaaaaaaaaaarkingDog 님의 백준 DP 문제집(7319)에 있는 문제들을 해결하면서 유형별로 분류한 문제들을 소개하겠습니다.
1. 점화식 기반 기초 DP 문제
기초적인 DP 문제로, 단순한 점화식과 테이블을 사용해 해결할 수 있는 문제들입니다. 보통 이전 상태의 결과를 이용해 현재 상태를 계산합니다.
- 특징: 점화식만 세우면 쉽게 해결 가능
- 예시 문제:
2. 최적 경로 및 상태 전이 문제
여러 경로 중 최소 비용이나 최적 경로를 찾는 유형의 문제입니다. 일반적으로 **상태 전이 표(State Transition Table)**를 이용해 문제를 해결합니다.
- 특징: 경로, 비용, 거리 계산을 위한 최적화
- 예시 문제:
3. 부분합 및 부분 수열 문제
연속된 부분합 또는 특정 조건의 부분 수열을 찾는 문제로, 특히 LIS(가장 긴 증가하는 부분 수열) 문제가 자주 출제됩니다.
- 특징: 연속합, 부분 수열 등의 최대값 탐색
- 예시 문제:
4. 문자열 및 배열 변형 문제
문자열이나 2차원 배열을 다루는 문제들로, LCS(최장 공통 부분 수열) 유형이 대표적입니다.
- 특징: 문자열의 편집 거리, 배열 내 최대값 등을 탐색
- 예시 문제:
5. 게임 이론 문제
게임에서 최적의 전략을 찾는 문제입니다. 상대의 행동을 예측하고, 현재 상태에서 최적의 선택을 하는 알고리즘이 필요합니다.
- 특징: 게임 상태에서 최적의 수를 선택
- 예시 문제:
6. 조합 및 수열 분할 문제
특정 수를 다양한 방식으로 조합하거나 분할하는 문제입니다. 보통 경우의 수를 세는 문제가 여기에 해당합니다.
- 특징: 수의 분할, 조합 경우의 수 탐색
- 예시 문제:
7. 2차원 배열 및 격자 문제
2차원 배열이나 격자 형태의 문제로, 주어진 상태를 이동하며 최적의 값을 구하는 문제들입니다.
- 특징: 2차원 배열의 경로 탐색 및 최적화
- 예시 문제:
8. 수학적 수열 및 확장 문제
피보나치 수열과 같은 수학적 패턴을 확장하여 특정 조건을 만족하는 값을 구하는 문제들입니다.
- 특징: 피보나치 수열, 구간 합 등 수학적 점화식 적용
- 예시 문제:
정리
DP 문제는 크게 다음 8가지 유형으로 분류할 수 있습니다.
- 기초 점화식 문제
- 최적 경로 및 상태 전이 문제
- 부분합 및 부분 수열 문제
- 문자열 및 배열 변형 문제
- 게임 이론 문제
- 조합 및 수열 분할 문제
- 2차원 배열 및 격자 문제
- 수학적 확장 문제
각 유형별로 출제되는 문제의 특성을 이해하고, 점화식 세우는 연습을 꾸준히 하면 DP 문제를 효과적으로 해결할 수 있습니다. 앞으로도 문제 풀이 과정을 포스팅할 예정이니 많은 관심 부탁드립니다! 😊
💡 도움이 되셨다면 댓글과 공감 부탁드립니다! 😊
📌 더 많은 알고리즘 풀이와 프로그래밍 자료는 블로그에서 확인하세요!
✉️ 문의나 피드백은 댓글이나 이메일로 남겨주세요.
'Computer Science > 자료구조 & 알고리즘' 카테고리의 다른 글
[자료구조 & 알고리즘] 이분 탐색 (Binary Search) (0) | 2025.02.03 |
---|---|
[자료구조 & 알고리즘] 그리디 알고리즘(Greedy Algorithm) (0) | 2025.02.02 |
[자료구조 & 알고리즘] 다이나믹 프로그래밍(Dynamic Programming) 이해하기 (0) | 2025.01.14 |
[알고리즘] 시뮬레이션 문제는 왜 어려울까? (feat. 설계의 중요성) (0) | 2025.01.09 |
[알고리즘] 백트래킹과 DFS: 문제 요구사항에 맞춘 설계 방법 (feat. 알고리즘 문제 유형) (0) | 2025.01.07 |