해당 문제는 블럭의 높이가 주어졌을 때 블럭 사이사이에 빗물이 얼마나 고이는지 확인하는 문제다.
처음 접근할 때는 while문을 활용하고, start를 설정하고 ans_lst를 start를 기준으로 lst[start]값보다 같거난 큰 값이 들어오면 반복문을 탈출해 고인 물의 양을 더해주고 ans_lst를 초기화 후, i+1 을 start에 대입하는 방식으로 문제를 풀었다.
h, w = map(int, input().split())
lst = list(map(int, input().split()))
ans = 0
start = 0
ans_lst = []
i = 0
while i < len(lst):
while i < len(lst):
if i == start:
ans_lst.append(lst[i])
elif lst[i] < lst[start]:
ans_lst.append(lst[i])
elif lst[i] >= lst[start]:
ans_lst.append(lst[i])
start = i
break
i += 1
ans_lst.sort()
for j in range(len(ans_lst)-2):
ans += ans_lst[-2] - ans_lst[j]
ans_lst.clear()
print(ans)
결과는 당연히 틀렸다..
그래서 다른 방법으로 접근했는데 즉 자신보다 왼쪽에 큰 값과, 오른쪽에 가장 큰값을 가져와 자신과 비교해 두 max 값이 자신보다 크다면 둘 중 작은 값에서 lst[i] 값을 빼주고 이를 ans에 더해주는 형태로 문제를 풀었다.
h, w = map(int, input().split())
lst = list(map(int, input().split()))
ans = 0
for i in range(1,w-1):
lmax = max(lst[:i])
rmax = max(lst[i+1:])
if lmax > lst[i] and rmax > lst[i]:
ans += min(lmax, rmax) - lst[i]
print(ans)