가장 기본적인 문제가 동전 문제이다.
만들어야 할 금액과 동전의 종류가 주어졌을 때
동전들을 최소의 개수로 조합해서 금액을 만들면 되는 문제이다.
예를들어 만들어야 하는 금액이 15원이고
주어진 동전의 종류가 1원, 5원, 12원이면(동전은 여러번 사용해도 된다.)
15원을 만들 수 있는 동전의 최소의 개수는 3이다. (5원+5원+5원)
이 문제를 푸는 핵심은 다음과 같다.
1. 다이나믹 테이블 D[]를 필요한 동전의 개수를 저장하는 배열로 선언
예) D[15] = 15원을 만드는 데 필요한 동전의 개수
2. 다이나믹 테이블 D[]는
만들어야 할 금액에서 추가할 동전의 금액을 뺐을 때
예를 들어 15원-5원은 10원이므로
10원을 만드는 데 필요한 동전의 개수에 한개를 더한 값
15원을 만드는 데 필요한 동전의 개수를 비교하여
최소값을 택하는 방식으로 다이나믹 테이블을 만들어간다.
다이나믹 테이블이 만들어지는 방식을 간단히 정리해 보면 다음과 같다.
D[5], D[5-1]+1
D[5], D[5-5]+1 ==> D[5]는 초기에 MAX값으로 설정되어 있으므로 D[5-5]+1=D[0]+1=0+1=1이 최소값
D[10], D[10-1]+1
D[10], D[10-5]+1 ==> D[10-5]+1=D[5]+1=1+1=2
D[10], D[10-12]+1
위의 내용을 코드로 작성해 보면 다음과 같다.
No comments:
Post a Comment