동적 프로그래밍
문제의 크기를 변화하면서 정답을 계산
작은 문제의 결과를 이용해서 큰 문제의 정답을 빠르게 계산하는 알고리즘
+ memoization
1. 문제가 원하는 정답을 찾기 위해 가장 먼저 완전탐색 접근을 시도
2. 완전탐색과정에서 탐색하게 되는 경우가 지나치게 많아서 도저히 안 될것같다
3. 모든 경우를 빠르게 탐색하는 방법으로 dynamic programming접근을 시도해본다
-> 규격화된 문제 풀이 순서를 외워서 훈련하..?
풀고싶은 가짜 문제 정의 -> 가짜 문제를 풀면 진짜 문제를 풀 수 있는가?
-> 초기 값은? -> 점화식 구해내기 -> 진짜 문제 정답 출력
상태 공간의 정의와 상태 파악.status
반복되는 상태공간이라면 고려해볼만하다. 또한, 무엇의 상태에 따라 변화되는지 파악하는 것이 중요하다.
ex) d[i] = 1~i 원소에 대해 조건을 만족하는.
d[i][j] i~j번 원소에 대해서 조건을 만족
d[i][j] ij의 계산값 등
가짜 문제의 예시는
진짜 문제가 수열 A[1...N]에서 조건을 만족하는 부분 수열의 개수라면
D[i]는 수열A[1..i] 에서 조건을 만족하는 부분 수열의 개수
D[N]에 정답이 있을 것
초기값 : 쪼개지 않아도 풀 수 있는 작은 문제들의 정답
점화식 구하기 : 계산에 필요한 탐색 경우를 공통점끼리 묶어내기(partitioning)
묶어낸 부분의 정답을 배열을 이용해 빠르게 계산하기
가짜 문제의 정의
1) 문제 크기 N을 변수로 만들어 표기하는 경우
ex) 1,2,3 합 || 2n 타일링
2) 문제크기 N과 마지막 상태를 기록해주는 경우
계단오르기, 오르막 수
ex) D[i][0] : i-1 안밟고 i번째 계단에 도착한 최대 점수
D[i][1] : i-1 밟고 i번째 계단에 도착한 최대점수
D[i][last] : 길이가 i이며 last로 끝나는 오르막수의 개수
3) 구간 L~R에 대한 문제를 해결할 때
4) 2차원 격자 배열에서 문제를 해결할 때
5) 트리 구조에서 문제를 해결할 때.
추천 문제)
이런 dp 풀어본적 있나요?
- 원형 dp
https://www.acmicpc.net/problem/17404 (백준, RGB거리 2)
https://programmers.co.kr/learn/courses/30/lessons/42897
코딩테스트 연습 - 도둑질
도둑이 어느 마을을 털 계획을 하고 있습니다. 이 마을의 모든 집들은 아래 그림과 같이 동그랗게 배치되어 있습니다. 각 집들은 서로 인접한 집들과 방범장치가 연결되어 있기 때문에 인접한
programmers.co.kr
- 트리 dp
'알고리즘 > 유형별 정리' 카테고리의 다른 글
9. 최단거리 알고리즘 (0) | 2021.10.21 |
---|---|
8. 위상정렬(Topological sort) (0) | 2021.10.20 |
7. 트리 (0) | 2021.10.20 |
6. 그래프 (0) | 2021.10.09 |
5. 투포인터 (0) | 2021.10.09 |