본문 바로가기

Coding Test/BOJ

[백준/Python] 14719 빗물

문제 링크

 

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)
반응형