Container With Most Water

zoovely·2024년 5월 13일
0
post-thumbnail

💬 문제

[문제 링크]

각 인덱스 위치에 따른 직선 높이가 들어있는 정수 배열 height
직선 사이에 물이 담긴다고 할 때
제일 많이 받을 수 있는 양을 구하여 반환

✍️ 나의 풀이

/**
 * @param {number[]} height
 * @return {number}
 */
var maxArea = function(height) {
    let left = 0;
    let right = height.length - 1;
    let max = 0;

    while (left < right) {
        let amount = (right - left) * (Math.min(height[left], height[right]));
        max = amount > max ? amount : max;
        if (height[left] > height[right])
            right--;
        else
            left++;
    }

    return max;
};

배열의 왼쪽 끝과 오른쪽 끝에서 시작
현재 가리키고 있는 두 인덱스를 이용하여 물의 양 계산
계산할 때마다 더 큰 양을 max에 저장
두 인덱스의 값을 비교했을 때 작은 쪽이 다음으로 이동

📌 결과

Accepted
Runtime 66ms (Beats 63.63%)
Memory 56.70MB (Beats 80.83%)

📚 러닝 포인트

투 포인터 문제는 다 비슷비슷한 알고리즘이라서 덕분에 한번에 구현해낼 수 있었다. 이번에도 역시 순회하면서 어느쪽을 먼저 인덱스 이동시킬지가 문제였는데, 물의 양을 계산할 때 세로 길이는 높이가 더 낮은 쪽이 기준이 되기 때문에 더 넓은 면적을 위해서는 낮은 쪽을 먼저 이동시키는 게 맞다고 생각했다. 결과적으로 그게 맞는 방법이라 뿌듯했던 순간!

profile
나도 할 수 있을까?

0개의 댓글