본문 바로가기

Algorithm/LeetCode

[Java] LeetCode 11번 Container With Most Water

막대기 2개로 둘러쌓인 부분의 넓이를 구하는 것이 문제이다.

작은 길이의 막대기가 기준이 되어 넓이가 구해지는 것이 문제의 포인트이다. 

왼쪽 막대기의 위치를 l 오른쪽 막대기의 위치를 r로 두고, 왼쪽과 오른쪽 중 작은 길이의 막대기를 한칸씩 옮겨서 넓이의 최대값을 찾는다. 작은 것은 옮기는 이유는 더 큰 넓이가 되기 위해서는 작은 길이의 막대기가 길어져야되기 때문이다. 

class Solution {
    public int maxArea(int[] height) {
        int l = 0;
        int r = height.length - 1;
        int max = (r - l) * Math.min(height[l], height[r]);
        while (l < r) {
            if (height[l] <= height[r]) {
                l++;
            } else {
                r--;
            }
            max = Math.max((r - l) * Math.min(height[l], height[r]), max);
        }
        return max;
    }
}
반응형