1. 문제 파악
- 기둥과 기둥 사이에 시멘트를 부울 수 있지만, 두 기둥 중 작은 기둥의 높이까지만 부을 수 있다.
- 최대한 높이 차가 적도록 하기 위해서는 기준이 되는 두 기둥을 잘 선정해야 한다.
- 현재 위치에서 오른쪽에서 가장 큰 높이, 왼쪽에서 가장 큰 높이를 구해 그 중 작은 값을 기준으로 해서 현재 값을 빼주는 방식을 사용하면 부을 수 있는 시멘트 양을 알아낼 수 있다.
- 정방향과 역방향으로 반복문을 진행해 각각의 최댓값을 저장할 수 있도록 배열을 선언해야 한다.
2. 풀이
- 왼쪽에서부터 끝까지 반복문을 돌면서 기둥의 최댓값과 현재 기둥의 높이를 비교한 뒤, 더 큰 값을 dp_l 배열에 저장합니다. 이때, 현재 기둥의 높이가 더 크다면 max_i 값을 갱신해 줍니다.
- 마찬가지로 오른쪽에서부터 왼쪽까지 반복문을 돌면서 1번과 같은 과정을 거칩니다.
- 가장 높게 쌓인 시멘트의 높이를 구해야 하기 때문에 ArrayList를 선언합니다.
- 기둥 사이에 쌓을 수 있는 시멘트의 양은 두 기둥 중 작은 기둥의 높이까지만 부을 수 있기 때문에 dp_l과 dp_r 두 가지 값 중 작은 값을 고릅니다.
- 4번에서 구한 값과 현재 기둥의 차이를 구해 시멘트의 양을 구하고, 이 값을 sum에 더해 시멘트의 총량을 알아냅니다.