BOJ/Python

백준 14719번 빗물 파이썬

띵지니어 2024. 3. 19. 02:16

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

 

14719번: 빗물

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

www.acmicpc.net

 

내 코드

h, w = map(int, input().split())
blocks = list(map(int, input().split()))

result = 0
for i in range(1, w-1):
    
    left_max = max(blocks[:i])
    right_max = max(blocks[i+1:])
    
    standard = min(left_max, right_max)
    depth = blocks[i]
    
    if standard > depth:
        result += (standard - depth)
        
print(result)

 

Review

문제 해결을 하기 위해 제가 접근한 방식입니다.

1. 조건상 맨 앞과 끝은 절대 채울 수 없다 (0번과 맨 끝 인덱스)

2. 특정 위치를 기준으로 양옆에 가장 높은 두 개의 기둥 중에, 낮은 기둥으로 기준으로 한다.

3. 특정 위치와 2번 내용으로 얻은 기둥을 비교하여 특정 위치가 더 낮으면 물을 채운다.

그림으로 보면 다음과 같아요
예제 입력 기준으로 설명해 보겠습니다.

 

왜 min(left_max, right_max) 가 standrad 인지는, 아래 힌트를 보고 생각했습니다.

 

잘못된 부분이나, 모르는 부분은 언제든지 의견 주시면 감사하겠습니다.