[백준 14719번] 빗물

박형진·2022년 11월 9일
0

https://www.acmicpc.net/problem/14719


1. 코드

import sys

h, w = map(int, sys.stdin.readline().rstrip().split())
height = list(map(int, sys.stdin.readline().rstrip().split()))

stack = []  #stack에 들어가는 인덱스는 물로 채워질 자리를 의미한다.
volume = 0
for right in range(len(height)):
    # 마지막 높이보다 더 큰 높이 만나면 물을 채움
    while stack and height[right] > height[stack[-1]]:
        mid = stack.pop()
        if len(stack) == 0:
            break
        left = stack[-1]
        distance = right - left - 1  #길이
        waters = min(height[right], height[left]) - height[mid]  #높이
        volume += distance * waters
    stack.append(right)
print(volume)
profile
안녕하세요!

0개의 댓글