알고리즘/알고리즘

[동적계획법] 최소 경로 비용 합 ( Minimum Path Sum )

IT록흐 2021. 11. 5. 08:35
반응형

동적계획법(Dynamic Programing)이란?

 

복잡하고 어려운 문제를 작은 단위로 '분할'한 후 다시 '결합'하여 최적의 답을 구하는 방법

동적계획법은 분할된 모든 경우의 수를 검토한다. 

중복되는 경우의 검토 비용을 줄이기 위해 기존의 결과를 저장한다. 

 

 

최소 경로 비용 합 (  Minimum Path Sum  )

 

타일 안에서 이동은 오른쪽이나 아래쪽만 가능하다. 각 타일에 비용이 할당되어 있을 때, 시작부터 끝까지 가는 최소 비용을 구하라. 

 

 

 

Top-Down

 

 

목적지에 도달할 수 있는 경우의 수는 A와 B 두 가지이다. A와 B의 비용을 구해 최소값을 선택하면 된다. 

 

 

 

A는 C와 D의 최소비용이다. Top-Down 방식을 적용하면 이렇게 하나씩 구하면 된다. 중복되는 경로의 비용을 저장하여 최소비용을 검토한다고 해도 꽤나 복잡하다. 

 

 

Bottom-Up

 

Top-Down 방식은 보통 재귀함수로 구현된다. 재귀함수는 같은 함수를 반복적으로 호출하는 방식이다. 함수는 영역(local)을 갖는다. 그래서 많이 호출되면 그만큼 스택메모리를 잡아먹는다. 엄청나게 큰 수를 구하고 싶으면 그만큼 많은 함수가 호출되므로 스택오버플로우가 발생할 수 있다.

 

 

 

 

시작부터 모든 타일의 최소비용을 하나씩 구해본다. 

 

 

최소비용 타일

 

타일 안에서 이동은 오른쪽과 아래쪽만 가능하므로 가장 위쪽과 왼쪽의 최소비용은 정해져 있다. 이제부터는 오른쪽과 아래쪽 중 최소(min)비용을 선택해서 타일에 할당된 비용과 더해주기만 하면 된다. 

 

 

 

 

4와 3 중 최소는 3이다. 타일에 할당된 비용이 4 이므로 4 + 3을 하여 7이 된다. 이런 과정을 모든 타일에 반복한다. 

 

 

 

 

이와 같이, 모든 계산이 완료되면 최소비용을 구할 수 있다. 

 

 


 

 

참고자료

 

 

 

 

 

 

 

 

 

반응형