문제

이 문제의 key point는 빗물이 고이기 위해서는 양옆이 블록으로 막혀있어야 한다는 것이다.
그렇기 때문에 for문으로 반복문을 돌면서 현재 좌표를 기준으로 양옆에 막아주는 블록이 있어서 현재좌표에 빗물이 고일 수 있는지 여부를 체크해주었다.
left_max = max(arr[:i+1])
right_max = max(arr[i:])
compare = min(left_max,right_max)
현재 좌표 i의 양옆에서 각각의 max를 구한후 둘 중 작은 값을 구해준다. (현재 좌표에 빗물이 고이는 경우 더 작은 값과 비교를 해서 빗물이 얼마나 고였는지 판단해야되기 때문)
그 후 현재 좌표보다 높은지 (그래야 현재 좌표에 빗물이 고일 수 있음) , 그리고 양옆 블록이 0보다 높은지 (0이면 비가 고일 수 없음)
이 두가지를 체크해주면 된다.
if compare > 0 and compare > arr[i]:
ans += compare - arr[i]
전체코드
h, w = map(int, input().split())
arr = list(map(int, input().split()))
ans = 0
for i in range(w):
left_max = max(arr[:i+1])
right_max = max(arr[i:])
compare = min(left_max,right_max)
#벽으로 둘러싸여있고 현재 i번쨰 부분에 물이 고인다면 추가
if compare > 0 and compare > arr[i]:
ans += compare - arr[i]
print(ans)'코딩테스트 > 백준' 카테고리의 다른 글
| [백준] 5557번 1학년 - python 파이썬 (0) | 2024.12.17 |
|---|---|
| [백준] 1038 감소하는 수 - python 파이썬 (0) | 2024.12.10 |
| [백준] 2166번 다각형의 면적 - python 파이썬 (2) | 2024.11.27 |
| [백준] 9205번 맥주마시면서 걸어가기 - python 파이썬 (2) | 2024.11.20 |
| [백준] 10799번 쇠막대기 - python 파이썬 (0) | 2024.10.31 |