본문 바로가기
알고리즘

동적계획법(Dynamic Programming, DP)

by 까망 하르방 2021. 5. 22.
반응형

동적 계획법(Dynamic Programming)은 큰 의미에서 분할 정복과 같은 접근 방식을 의미한다.

 

처음 주어진 문제를 더 작은 문제들로 나눈 뒤 각 조각의 답을 계산하고, 

이 답들로부터 원래 문제에 대한 답을 계산해 내기 때문이다.

동적 계획법과 분할 정복의 차이가 발생하는 부분은 문제를 나누는 방식이다.

 

동적 계획법(DP)은 다른 알고리즘과 함께 이용해서 문제를 풀어야 하는 경우가 있다.

특정 Case를 여러번 계산하는 대신 한 번만 계산하고 계산 결과를 재활용하여 속도를 높이다.

그러기 위해 각 문제의 답을 메모리에 저장해 둘 필요가 있다.  DP[ ][ ]

연속된 부분 합(연속합) - 1 (완전 탐색) 

연속된 부분 합(연속합) - 2 (Prefix Sum)  

연속된 부분 합(연속합) - 3 (DP)  

 

 

 

이때 미리 계산한 값을 저장해 두는 메모리 장소를 캐시(cache)라고 부르며,

두 번이상 계산되는 부분 문제를 "중복되는 부분 문제(Overlapping Subproblems)"라고도 한다.

 

일반적인 서비스를 만드는 업무에서는 적용하기 쉬운 방식은 아니기도 하고

개인적으로는 수학(?)적인 감각이 필요해서 선호하지 않는 기법이다. 🤦‍♀️

 

이러한 유형은 기업에 따라 1~2문제씩 출제되기도 하는데,

DP까지 이용하지 않고 문제 규칙을 이용하면 풀 수 있는 경우도 있다.

 

Reference

[BOJ] 2533 사회망 서비스(SNS) 

[BOJ] 2156 포도주 시식 

[BOJ] 2579 계단 오르기 

[BOJ] 9461 파도반 수열 

[BOJ] 11048 이동하기 

[BOJ] 1328 고층빌딩  

[BOJ] 1890 점프 

[BOJ] 1932 정수 삼각형 

[BOJ] 8895 막대배치 

[BOJ] 1915 가장 큰 정사각형 

[BOJ] 1793 타일링 

[BOJ] 14501 퇴사 

[BOJ] 1149 RGB거리 

[BOJ] 11053 가장 긴 증가하는 부분 수열 

- [BOJ] 10759 팰린드롬 경로 3 

[SWEA] 4052 프리랜서

[SWEA] 4062 Largest Empty Square

[SWEA] 4534 트리 흑백 색칠 

[SWEA] 4043 선 맞춤 

[Algospot] BOGGLE 보글 게임 (+ 3차원 배열)

[Algospot] JUMPGAME 외발 뛰기

[Algospot] CHRISTMAS 크리스마스 인형 (+ 부분합)

 

 

 

반응형

댓글