14179 : 빗물

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)

'문제풀기 > 백준' 카테고리의 다른 글

1005번 : ACM Craft  (0) 2022.01.22
1806번 : 부분합  (0) 2022.01.10
백준 22860번 : 폴더 정리(small)  (0) 2021.10.06
백준 14567번 : 선수과목 (Prerequisite)  (0) 2021.10.05
백준 1548번 : 부분 삼각 수열  (0) 2021.10.05