def trapping_rain(buildings):
# buildings의 2번째부터 각 index부터 오른쪽 끝(len(builidings)-1) index까지의 최대값을 포함하는 리스트
max_right = [0] * (len(buildings) - 1)
right = buildings[-1]
for i in range(len(buildings)-2, -1, -1):
right = max(right, buildings[i+1])
max_right[i] = right
#왼쪽의 최대값은 for loop 안에서 업데이트
max_left = buildings[0]
res = 0
for i in range(1, len(buildings) - 1):
upper_bound = min(max_left, max_right[i-1])
res += max(0, upper_bound - buildings[i])
max_left = max(max_left, buildings[i])
return res
# 테스트
print(trapping_rain([3, 0, 0, 2, 0, 4]))
print(trapping_rain([0, 1, 0, 2, 1, 0, 1, 3, 2, 1, 2, 1]))