원래 오늘은 이코테 구현 문제에 대해서 한 줄 코멘트 형식으로 남기는 걸 완성하려고 했는데 생각보다 생각이 안나서 그냥 빗물로 꿀 빨아 보려고 이 문제를 열었다. 이 유사한 문항을 예전에 코포에서 풀었던 것 같다. 지금도 허접이지만 그때도 허접이라 그런지 방법은 금방 생각 났는데 방향성이 제대로 안잡혀서 생각보다 시간을 많이 사용하였다.
우선 논리구조는 간단하다 왼쪽 오른쪽 해서 그냥 작은걸 기준으로 빼주면 된다. 몇 개의 예외사항이 존재하겠지만 그건 그냥 if문으로 처리해주면 된다는 안일한 생각으로 풀어보았다. 왼쪽 이상의 값이 끝날때까지 나와주는 문항은 비교적 쉽게 해결되었는데 끝까지 안 나오는 경우 + 그 안에서도 웅덩이가 형성되는 경우를 처리하는데 어려움이 있었다. 코드를 보다보면 대충 이해가 갈 것 같다. while문 아래가 그걸 해결하기 위한 시행착오가 좀 녹아있다.
import sys
H, W = map(int, sys.stdin.readline().split())
arr = list(map(int, sys.stdin.readline().split()))
left = arr[0]
temp = []
ans = 0
for i in arr[1:]:
if left != 0 and i < left:
temp.append(i)
elif left == 0:
if i != 0:
left = i
elif i >= left:
temp.append(left)
for j in temp:
ans += left - j
left = i
temp = []
while len(temp) != 0:
tempp = temp.index(max(temp))
for i in range(tempp):
ans += max(temp) - temp[i]
temp = temp[tempp + 1:]
print(ans)