티스토리 뷰

동적계획법

동적 계획법이라고 불려지고 있지만, 사실 기법은 단어의 의미와 크게 상관없다고 합니다(출처: DP 만든이)

 

정의

주어진 문제를 여러 개의 부분 문제들로 나누어 다음, 결과로 주어진 문제를 푼다.

 

분할정복과 유사해 보이는 정의입니다. 하지만 분할정복은 나누어진 문제가 중복되지 않고, DP 중복되는 문제가 발생합니다.

 

설명

점화식에 관련된 문제를 풀다보면 재귀 함수를 이용해 풀이하는 경우가 존재합니다.

재귀 함수를 사용하면 보기에도 직관적이고 구현하기 쉽습니다. 하지만 점화식의 N값이 커지면 계산양이 기하급수적으로 증가할 수 있다는 단점이 있습니다.

 

이 점을 보완한 방법이 ‘DP’ 라고 할 수 있습니다.

재귀 함수의 경우 이미 계산 했던 값을 다시 또 계산해야하지만, DP에서는 이전의 계산을 기억했다가 다음번에 계산할 때 기억했던 값을 불러와 사용합니다. 이것을 ‘메모이제이션’ 이라고도 합니다.

 

 

동적계획법의 방식

DP의 대표적인 구현 방식으로는, 메모이제이션을 기반으로한 재귀 함수기법과 반복문이 있습니다. 

재귀함수는 탑 다운 방식으로 이루어지고, 반복문은 바텀 업 방식으로 구현됩니다.

 

관련 문제

BOJ1463번: 1로 만들기

 

BOJ 2193번: 이친수

 

BOJ 1904번: 01타일

 

BOJ 11726번: 2×n 타일링

 

BOJ 11727번: 2×n 타일링 2

 

BOJ 9465번: 스티커

 

BOJ 2294번: 동전 2

 

BOJ 1699번: 제곱수의 합

 

BOJ 11052번: 카드 구매하기

 

BOJ 10844번: 쉬운 계단 수

 

BOJ 11057번: 오르막 수

 

BOJ 11051번: 이항 계수 2

 

BOJ 12865번: 평범한 배낭

 

BOJ 16500번: 문자열 판별

 

BOJ 11055번: 가장 큰 증가 부분 수열

 

BOJ 1912번: 연속합

 

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/05   »
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
글 보관함