-
반응형
한국어로는 동적 프로그래밍입니다.
알고리즘의 효율을 개선해주는 방법이라고 할 수 있습니다.
다이내믹 프로그래밍 사용 조건...
1. 최적 부분 구조: 큰 문제를 여러 작은 문제들로 나눌 수 있는지
2. 중복되는 부분 문제 : 동일한 작은 문제들을 반복적으로 해결할 수 있는지
메모이제이션...
-한 번 구한 문제의 답을 메모리 공간에 메모해놓는 기법
-다이내믹 프로그래밍 구현 방법 중 하나
다이나믹 프로그래밍 문제 접근 방법...
1. 그리디, 구현, 완전 탐색 등의 아이디어를 접목시켜보고, 그래도 해결이 안 되면
다이내믹 프로그래밍을 접목시켜보자
2. 재귀 함수로 먼저 코딩해본 후, 다이내믹 프로그래밍으로 효율성을 개선시켜보자
예제 1) 효율적인 화폐 구성
-화폐 단위로 한 칸씩 이동하는 느낌?으로 접근해본다.
ex) 화폐단위 2를 기준으로 생각하고 있다면
d [2] = 1일 때, d [4] = 2 임을 유추할 수 있다. (2원에 2원 1개만 더하면 4원이 됨으로)
-화폐단위별로 한 번씩 유추하는 과정을 반복해준다.(과정이 반복되면 반복될수록 값이 더 정확해진다.)
ex) 화폐단위 2를 기준으로 반복이 한번 끝난 상태에서, 화폐단위 3을 기준으로 생각하고 있다고 가정해보자.
2 기준 반복에서는 d [6] = 3이었다.
하지만
3 기준 반복에서는
d [3]=1을 바탕으로 d [6] = 2 임을 유추할 수 있다.(좀 더 정확한 값이 도출됨)
전 처음에 코드 이해에 정말 오랜 시간이 걸렸습니다 ㅠㅠㅠ
조금 더 직관적인 접근을 위해 표를 살짝 추가해볼게요~
N=3 / money_list = [2,3,5] / M=7 일 때
(i=0 loop)
d index 0 1 2 3 4 5 6 7 d value 0 1001 1 1001 1 1001 1 1001 (i=1 loop)
d index 0 1 2 3 4 5 6 7 d value 0 1001 1 1 2 2 2 3 (i=2 loop)
d index 0 1 2 3 4 5 6 7 d value 0 1001 1 1 2 1 2 2
정리)
-막상 짜고 보면 간단하다.
-근본적인 사고의 틀인 점화식을 구하는 것이 가장 중요하다.
-메모이제이션을 통해 효율을 높인다.
반응형'IT > 자료구조 & 알고리즘' 카테고리의 다른 글
[자료구조] 해쉬 테이블(Hash table) (Python) (0) 2021.07.28 [자료구조] 링크드 리스트 (Linked List) (Python) (0) 2021.07.28 그리디 알고리즘(파이썬3) (0) 2021.02.03 [프로그래머스/Level2/파이썬3] 프린터 (0) 2021.02.02 댓글