문제 링크
14719번: 빗물
첫 번째 줄에는 2차원 세계의 세로 길이 H과 2차원 세계의 가로 길이 W가 주어진다. (1 ≤ H, W ≤ 500) 두 번째 줄에는 블록이 쌓인 높이를 의미하는 0이상 H이하의 정수가 2차원 세계의 맨 왼쪽 위치
www.acmicpc.net
문제 풀이
- 양 끝을 제외하고 현재 위치에서 왼쪽, 오른쪽 부분에 자신보다 높이가 큰 블록이 있는지 확인하면 된다.
- 블록이 3 1 0 4 과 같을 때, 1 블록에서 왼쪽에는 3인 블록이 오른쪽에는 4인 블록이 있다. 그중 더 작은 블록만큼 물이 찰 수 있으므로 2만큼 차게 된다. 0 블록에서도 마찬가지이므로 3만큼 차게 된다.
- 만약, 한쪽이라도 자신의 위치보다 작은 블록이 있다면 물이 찰 수 없다.
전체 코드
import sys
input = sys.stdin.readline
h, w = map(int, input().split())
block = list(map(int, input().split()))
res = 0
for i in range(1, w-1):
# 현재 위치의 왼쪽, 오른쪽의 최대 블록 높이
# 그중 더 작은 값
height = min(max(block[:i]), max(block[i+1:]))
# 현재 위치보다 큰 경우에만 물이 참
if height >= block[i]:
res += height - block[i]
print(res)
반응형
'Coding Test > BOJ' 카테고리의 다른 글
[백준/Python] 16234 인구 이동 (0) | 2024.05.12 |
---|---|
[백준/Python] 2631 줄 세우기 (0) | 2024.04.11 |
[백준/Pyhon] 14002 가장 긴 증가하는 부분 수열 4 (0) | 2024.04.04 |
[백준/Python] 14891 톱니바퀴 (0) | 2024.04.03 |
[백준/Python] 14502 연구소 (0) | 2024.03.28 |