문제
https://www.acmicpc.net/problem/14719
입력
- 첫 번째 줄에는 2차원 세계의 세로 길이 H과 2차원 세계의 가로 길이 W가 주어진다. (1 ≤ H, W ≤ 500)
- 두 번째 줄에는 블록이 쌓인 높이를 의미하는 0이상 H이하의 정수가 2차원 세계의 맨 왼쪽 위치부터 차례대로 W개 주어진다.
- 따라서 블록 내부의 빈 공간이 생길 수 없다. 또 2차원 세계의 바닥은 항상 막혀있다고 가정하여도 좋다.
출력
- 2차원 세계에서는 한 칸의 용량은 1이다. 고이는 빗물의 총량을 출력하여라.
- 빗물이 전혀 고이지 않을 경우 0을 출력하여라.
문제 풀이
- 물이 고이는 조건
- 양 옆에 자신보다 높은 크기의 블럭이 존재해야한다.
- 물이 고이는 경우 더 작은 크기의 블럭의 크기만큼 빗물이 고인다.
- 더 작은 블럭의 크기 - 현재 블럭의 크기를 수행해야 총 빗물이 고이는 크기를 알아낼 수 있다.
- 위 조건을 수행하며 쌓인 크기를 모두 더해주면 정답
코드
h, w = map(int,input().split())
blocks = list(map(int,input().split()))
result = 0
for i in range(1, w - 1):
left = max(blocks[:i])
right = max(blocks[i + 1:])
now = blocks[i]
if left > now and right > now:
result += min(left, right) - now
print(result)
'Algorithm > Simulation' 카테고리의 다른 글
| [Python] 프로그래머스 PCCP 기출문제 1번 / 동영상 재생기 (0) | 2025.03.17 |
|---|---|
| [Python] 백준 31649번 Milk Exchange (4) | 2024.10.12 |
| [Python] 프로그래머스 최댓값과 최솟값 (0) | 2024.07.24 |
| [JAVA] 백준 14891번 톱니바퀴 (2) | 2023.12.21 |
| [Java] Swea 1961번 숫자 배열 회전 (0) | 2023.07.02 |