본문 바로가기
알고리즘

[백준/파이썬] #14719

by 룰루루 2025. 3. 13.

풀이를 봤는데 생각보다 간단한 문제였다... 30분 타임어택으로 못 풀어서 오늘도 풀이를 참고한 다음 풀어봤다. 

 

빗물이 고이는 원리를 생각하면 되는 문제였다. 내 왼쪽의 블럭들 중 가장 높은 지점(left_max)과 내 오른쪽의 블럭들 중 가장 높은 지점(right_max)을 구한 다음, 빗물은 낮은 곳에만 고일 수 있으니 둘의 최솟값을 구해준다. 

 

그러면 적어도 내가 있는 위치 i 에서는 그 값의 차이(min_max - arr[i])만큼은 물이 고일 것이다. 

H, W = map(int, input().split())
arr = list(map(int, input().split()))
answer = 0

for i in range(1, W-1):
    left_max = max(arr[:i])
    right_max = max(arr[i+1:])
    min_max = min(left_max, right_max)
    if min_max > arr[i]:
        answer += min_max - arr[i]

print(answer)

 

'알고리즘' 카테고리의 다른 글

[백준/파이썬] #22856  (0) 2025.03.16
[백준/파이썬] #20164  (0) 2025.03.14
[백준/파이썬] #16719  (0) 2025.03.11
[백준/파이썬] #16926  (0) 2025.03.10
[백준/파이썬] #20207  (0) 2025.03.09