백준[ 14719 | Python ] 빗물
업데이트:
문제
https://www.acmicpc.net/problem/14719
풀이
빗물은 어떤 블럭 두개 사이에 고인다.
기준점을 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)
생각 & 정리
구현이 쉽지 않다.
어떤 개념을 이해하는 것보다 설명하는게 더 어렵듯이 추상적으로는 어떻게 진행해야겠다 라고 생각이 가능하지만 구체화시키는데 어려움을 항상 겪고있다. 문제를 조금 더 간략하게 생각해보는데 집중을 해야할 것 같다.
댓글남기기