- 문제 링크: https://leetcode.com/problems/trapping-rain-water/
- 난이도: Hard
비가 왔을 때 얼마나 고이는지 푸는 문제다
투포인터, 공간복잡도는 O(1)로 풀 수 있는 문제다
일단 각 칸마다 물이 얼마나 찰 수 있는가? 생각해보면, 왼쪽 칸의 max, 오른쪽 칸의 max 중 더 작은 값에서 현재 칸의 높이를 빼면 된다
즉 min(leftMax, rightMax) - current가 된다.
현재 칸의 높이가 더 높을 수 있으니, 이 값이 양수인 때만 더해야 하는데, 이건 leftMax, rightMax 계산을 먼저 하면 굳이 안해도 된다
class Solution:
def trap(self, height: List[int]) -> int:
if not height:
return 0
l, r = 0, len(height) - 1
leftMax, rightMax = height[l], height[r]
ret = 0
while l < r:
if leftMax < rightMax:
l += 1
leftMax = max(leftMax, height[l])
ret += leftMax - height[l]
else:
r -= 1
rightMax = max(rightMax, height[r])
ret += rightMax - height[r]
return ret
반응형
'Online Judge > LeetCode' 카테고리의 다른 글
[LeetCode][Python] 155. Min Stack (0) | 2024.09.08 |
---|---|
[LeetCode][Python] 20. Valid Parentheses (0) | 2024.09.08 |
[LeetCode][Python] 11. Container With Most Water (0) | 2024.09.08 |
[LeetCode][Python] 15. 3Sum (0) | 2024.09.08 |
[LeetCode][Python] 167. Two Sum II - Input Array Is Sorted (0) | 2024.09.08 |