알고리즘 공부

[leetcode - 11. Container With Most Water] java

철매존 2025. 2. 5. 22:12
728x90
반응형

문제 설명

1. 배열이 주어진다.

2. 안에 물이 담긴다. (오른쪽 왼쪽 중 더 높은 것의 높이 * 둘의 거리만큼)

3. 가장 많은 물을 구하면 된다. 

 

풀이 과정 

1. 간단한 투포인터 문제이다.

2. 처음, 마지막 위치를 구한다.

3. 부피를 구한 뒤에 최대 부피를 갱신한다.

4. 둘 중 더 낮은 위치를 상대쪽으로 이동시키면 된다.

+) 나는 생각을 못했던 건데, 4번 과정에서 길이가 계속 더 작다면 더 긴 위치가 될 때까지 계속 갱신해 줘도 된다.(이러면 앞의 과정을 스킵할 수 있어서 시간 이득)

코드

class Solution {
    public int maxArea(int[] height) {
        int maxWater = 0;
        int start = 0;
        int end = height.length - 1;

        while(start <= end) {
            int length = end - start;
            int hei = Math.min(height[start], height[end]);
            int contain = length * hei;
            maxWater = Math.max(contain, maxWater);
            if(height[start] <= height[end]) start++;
            else end--;
        }

        return maxWater;
    }
}
반응형