이전까지 간단한 정렬과 dfs, bfs, 백 트래킹까지 살펴봤다. 이번에 해볼 동적계획법(Dynamic Programming)은 쉽게 말하자면 어렵거나 큰 문제를 간단하고 작은 여러 개의 문제로 나누어서 풀고 작은 문제의 답들을 이용하여 원래 문제의 답을 구하는 방식이다.
DP는 메모이제이션이라는 기법을 사용한다. 메모이제이션은 미리 구해둔 정답을 메모해놓고 다음번에 다시 해당 문제를 풀고자 한다면 미리 메모해둔 정답을 가져와서 쓰는 기법이다. 흔히 점화식으로 표현한다. DP는 잘 쪼개서 점화식을 만드는게 핵심이다. 그래서 평소 수학을 잘하는 사람이 DP도 잘한다고 흔히 얘기한다.
DP의 가장 기본 문제는 피보나치 수열이다. 간단하게 코드만 올려놓고 DP 다른 문제를 풀어보자.
int fibo[];
fibo[0] = 1;
fibo[1] = 1;
for(int i = 2; i <= n ; i++){
fibo[i] = fibo[i-1] + fibo[i-2];
}
728x90
'개발 > 알고리즘' 카테고리의 다른 글
백준_입출력(1) (0) | 2020.10.06 |
---|---|
알고리즘_부산코딩대회후기 (0) | 2019.11.16 |
알고리즘_부산코딩대회준비_수의 비밀 (0) | 2019.11.12 |
알고리즘_부산코딩대회준비_01. 탐색 및 정렬 (0) | 2019.11.12 |
백준 1620번:나는야 포켓몬 마스터 이다솜 (0) | 2019.11.11 |