알고리즘

<리트코드> 42번 파이썬 알고리즘 [투 포인터]

changha. 2021. 11. 24. 22:12
 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]

=> 오른쪽 장벽은 왼쪽보다 크거나 같기 때문에 신경 안써도 되고

왼쪽의 최대만 신경써서 현재 높이만큼 뺀게 물이 찬다

 

이부분만 이해하면 될 것 같다