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