def trap(self, height: List[int]) -> int:
if not height:
return 0
v = 0
l, r = 0, len(height) - 1
l_max, r_max = height[l], height[r]
while l < r:
l_max, r_max = max(l_max, height[l]), max(r_max, height[r])
if l_max <= r_max:
v += l_max - height[l]
l += 1
else:
v += r_max - height[r]
r -= 1
return v
이해하는데 1시간 정도 걸렸다
l_max - height[l]
=> 오른쪽 장벽은 왼쪽보다 크거나 같기 때문에 신경 안써도 되고
왼쪽의 최대만 신경써서 현재 높이만큼 뺀게 물이 찬다
이부분만 이해하면 될 것 같다
'알고리즘' 카테고리의 다른 글
<백준> 5430번 파이썬 알고리즘 (0) | 2021.11.27 |
---|---|
<리트코드> 561번 파이썬 알고리즘 (0) | 2021.11.24 |
<백준> 2579번 파이썬 알고리즘 [동적 프로그래밍] (0) | 2021.11.20 |
<백준> 1629번 파이썬 알고리즘 [분할정복] (0) | 2021.11.12 |
<백준> 1992번 파이썬 알고리즘 [분할 정복] (0) | 2021.11.08 |