DP(Dynamic Programing)은 직역하면 동적인 프로그래밍이다.
여기서 프로그래밍은 코드를 작성하는 행위를 뜻하는 것이 아니라, 테이블을 이용한다는 뜻을 의미한다.
+ 테이블을 이용한다가 무슨 뜻일까?
DP에서는 이전의 값을 저장하여, 한번 구한 값은 다시 구하지 않는다. 이때의 저장하는 배열을 테이블이라고 하는 것 같다.
필요한 배경지식
DP는 왜 등장한 것일까?
DP는 이전에 구했던 값을 활용하여 효율성을 증가시키기 위해 만들어진 것이다. 이를 조금 다르게 생각해 보면, 이전에 구했던 값을 반복해 구하는 상황에서, 이러한 비효율적인 문제를 해결하기 위해 나온 것이라고 볼 수 있다.
흔히 DP는 트리를 그리는 것과 흡사하다고 한다.
왜 트리를 그리는 것과 흡사할까?
이를 좀 더 쉽게 이해하기 위해
아주 간단한 DP문제인 피보나치 수열 문제를 봐보자.
위 문제는 피보나치 수열을 구하는 문제를 트리로 표현한 것이다. 이렇게 트리 형태를 지니는 상황에서 문제를 좀 더 효율적으로 해결하기 위해, 우리는 테이블에 이전의 구한 값을 저장한 후 활용하여 풀게 된 것이다.
활용
이러한 배경지식을 가진 상태에서 문제를 보았을 때, 조금 다른 관점으로 접근할 수 있었다.
먼저 문제를 접할 때, 완전 탐색으로 접근한 후 이를 효율적으로 짜려는 생각을 거치면 자연스레 DP가 생각이 났다.
'개발 > 알고리즘' 카테고리의 다른 글
[백준 / Python] 동전 1_2293 (0) | 2021.05.27 |
---|---|
[백준 / Python] 차이를 최대로_10819 (0) | 2021.05.27 |
[백준 / Python] 연구소_14502 (0) | 2021.05.20 |
[ 백준 / Python ] 피보나치의 수 (0) | 2021.05.14 |
[알고리즘] 시간 복잡도 Big-O (0) | 2021.05.11 |