문제풀기/백준
14179 : 빗물
Csprout
2022. 1. 4. 23:24
https://www.acmicpc.net/problem/14719
14719번: 빗물
첫 번째 줄에는 2차원 세계의 세로 길이 H과 2차원 세계의 가로 길이 W가 주어진다. (1 ≤ H, W ≤ 500) 두 번째 줄에는 블록이 쌓인 높이를 의미하는 0이상 H이하의 정수가 2차원 세계의 맨 왼쪽 위치
www.acmicpc.net
해당 index까지 왼쪽에서는 높이가 몇인 벽이 가장 높은지, 오른쪽에서는 높이가 몇인 벽이 가장 높은지를 저장해놓은 후, 양쪽 벽 중 낮은 벽까지만 물이 찬다는 아이디어를 사용하면 된다.
import sys
input = sys.stdin.readline
h,w = map(int,input().rstrip().split())
left = [0] * w
right = [0] * w
numbers = list(map(int,input().rstrip().split()))
left[0] = numbers[0]
for i in range(1,w):
if left[i-1] < numbers[i]:
left[i] = numbers[i]
else:
left[i] = left[i-1]
right[-1] = numbers[-1]
for i in range(w-1,0,-1):
if right[i] < numbers[i-1]:
right[i-1] = numbers[i-1]
else:
right[i-1] = right[i]
result = 0
for i in range(w):
result += min(left[i],right[i]) - numbers[i]
print(result)