러프하게 loop 두 개를 쓰면 풀 수 있다는 걸 알지만 왜인지 그러긴 싫은 느낌. 분명히 ponter 두 개를 이용할 것 같은데 조건을 어떻게 해야 될지 모르겠었다. 한 5분 고민하다 힌트를 봐버렸다. 그래도 양심상 3개중에 2개만 봤다.
class Solution:
def maxArea(self, height: List[int]) -> int:
ret = 0
left = 0
right = len(height) - 1
while right > left:
ret = max(ret, min(height[left],height[right])*(right-left))
if height[left] > height[right]:
right -= 1
else:
left += 1
return ret
내가 고민하던 조건은 더 낮은 쪽에 있는 애를 옮기는 거였다. 넓이가 줄었음에도 저장공간이 넓어지는 상황을 찾기 위해서인 것 같다.
다른 사람들 코드와 gpt의 개선점도 확인해 보았는데 이게 가장 최적화된 코드라고 한다. 만약 그럼에도 최적화를 한다면
정도이지 않을까 싶다.
앞으로는 문제를 풀 때에 다른 사람이 읽을 코드라고 생각하고 작성하는 연습을 해야겠다.