Leetcode/NeetCode

[TwoPointers][Medium] 11. Container With Most Water

자전거통학 2024. 7. 9. 21:44

https://leetcode.com/problems/container-with-most-water/description/

 

아래와 같이 수조가 있으며, 이때 높이의 배열이 주어진다. 

물을 가장 많이 담은 때의 물의 면적을 구하라.

 

 

양 수조의 기둥을 좁히며 면적을 구한다. 

면적은 간단히 구할 수 있다. 

문제는 좁히는 방법이다. 

양옆 기둥의 높이 중, 작은 쪽을 변경시켜 더 큰 결과를 얻는 것을 유도한다. 

 

코드. 

더보기
int maxArea(vector<int>& height) 
{    
    int left = 0;
    int right = height.size() - 1;

    int maxArea = 0;
    while (left < right)
    {
        int curH = min(height[left], height[right]);
        int area = (right - left) * curH;
        maxArea = max(maxArea, area);

        if (height[left] > height[right])
            --right;
        else if (height[left] < height[right])
            ++left;
        else
        {
            ++left; --right;
        }
    }
    return maxArea;
}

 

결과