업데이트:

최대 1 분 소요

문제

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

14719.png

풀이

빗물은 어떤 블럭 두개 사이에 고인다. 기준점을 i로 정해주고 i의 각 왼쪽 부분과 오른쪽 부분의 가장 높은 높이의 블럭을 뽑아낸다.
두 블럭 중 더 낮은 블럭의 높이 만큼 물이 고이기 때문에 이를 기준 블럭으로 설정하고
블럭들을 순회하며 기준 블럭과 그보다 낮은 블럭의 차를 더해가며 해결한다.

h, w = map(int, input().split())
blocks = list(map(int, input().split()))
rain = 0

for i in range(1, w - 1):
    l = max(blocks[:i])
    r = max(blocks[i+1:])
    min_h = min(l, r)

    if blocks[i] < min_h:
        rain += min_h - blocks[i]

print(rain)

생각 & 정리

구현이 쉽지 않다.
어떤 개념을 이해하는 것보다 설명하는게 더 어렵듯이 추상적으로는 어떻게 진행해야겠다 라고 생각이 가능하지만 구체화시키는데 어려움을 항상 겪고있다. 문제를 조금 더 간략하게 생각해보는데 집중을 해야할 것 같다.

댓글남기기