https://www.acmicpc.net/problem/14719
SWEA에서 풀었던 VIEW 문제와 비슷하다고 생각햇음
접근법은 좀 다르지만..
결국 아이디어는 다른 블로그를 통해 얻긴 했는데
빗물이 고일 수 있는 위치는 1에서 n-2번째 블록이고, for문 범위를 잡는다
현재 i번째 블록에서 좌, 우를 탐색한다
좌에서 max인 값과 우 에서 max값을 찾으면
내 블록 위로 고일 수 있는 좌,우 기둥의 max값을 알 수 있음
어차피 빗물은 벽이 아무리 멀리 떨어져있어도, 나보다 높은 좌우 기둥이 있으면 무조건 고임
좌,우 기둥 중 min값에 맞춰 빗물이 최대로 고일 수 있음
그리고, 그 좌,우 min 값 중 나 자신의 높이를 빼면 내 위치에서 고이는 빗물의 높이를 알 수 있음
그러나 좌,우min-나자신 값이 음수이면 빗물이 고일 수 없다는 뜻
그때는 sum에 더하지 않는다
i번째 위치에서 각 좌,우 max를 구하고, 그 값의 min을 구해서 자기 높이를 빼는 과정을 그림으로 나타낸 것
코드는 아래와 같다
h,w = map(int,input().split())
arr = list(map(int,input().split()))
result=0
leftl=0
rightl=0
rain=0
for i in range(1,w-1):
left_max = max(arr[:i])
right_max = max(arr[i+1:])
height = min(left_max,right_max)
if height>arr[i]:
result+=height-arr[i]
print(result)
'개발자 강화 > 코딩 테스트' 카테고리의 다른 글
[백준] 5567 결혼식 / BFS / Python 실2 (0) | 2024.11.24 |
---|---|
[백준] 1806 부분합 / 투포인터 / Python 골4 (0) | 2024.11.23 |
[백준] 회전초밥 / Python 실1 (0) | 2024.11.22 |
[이취코] 음료수 얼려먹기 / BFS / Python (0) | 2024.11.21 |
[이취코] DP 실전 - 못생긴 수 / Python (0) | 2024.11.21 |