문제 링크
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)
결과
다른 사람의 코드
리뷰
'알고리즘 문제 > 백준' 카테고리의 다른 글
백준 1700번: 멀티탭 스케줄링 python 풀이 및 정답 코드 (0) | 2021.10.30 |
---|---|
백준 1062번: 가르침 python 풀이 및 정답 코드 (0) | 2021.10.30 |
백준 2504번: 괄호의 값 python 풀이 및 정답 코드 (0) | 2021.10.30 |
백준 14888번: 연산자 끼워넣기 python 풀이 및 정답 코드 (0) | 2021.10.30 |
백준 12865, 13549, 1504, 14891, 1981번 파이썬 풀이 (0) | 2021.10.03 |