백준 14719번: 빗물 python 풀이 및 정답 코드

문제 링크

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

 

14719번: 빗물

첫 번째 줄에는 2차원 세계의 세로 길이 H과 2차원 세계의 가로 길이 W가 주어진다. (1 ≤ H, W ≤ 500) 두 번째 줄에는 블록이 쌓인 높이를 의미하는 0이상 H이하의 정수가 2차원 세계의 맨 왼쪽 위치

www.acmicpc.net

 

 

문제 설명

2차원 세계에 블록이 쌓여있다. 비가 오면 블록 사이에 빗물이 고인다.

비는 충분히 많이 온다. 고이는 빗물의 총량은 얼마일까?

 

 

문제 풀이

이 문제도 스택이다.

1. 스택에 현재 보는 인덱스를 넣어주고
2. 블럭 높이가 높아지는 걸 찾아서 고인 물을 더해준다.

 

 

코드

import sys
input = sys.stdin.readline

h, w = map(int, input().split())
block = list(map(int, input().split()))
stack = []
answer = 0

for i in range(w):
    while stack and block[i] > block[stack[-1]]:
        top = stack.pop()
        if not stack:
            break
        distance = (i - stack[-1]) - 1
        height = min(block[i], block[stack[-1]]) - block[top]
        answer += (distance * height)
    stack.append(i)

print(answer)

 

 

결과

 

 

 

다른 사람의 코드

 

 

 

리뷰