반응형
1. 문제
- 높이 정보가 담긴 배열 height이 주어질 때, 두 개의 라인 안에 가장 많은 물을 담을 수 있는 양을 반환하라.
2. 해결
function maxArea(height: number[]): number {
let max = Number.MIN_SAFE_INTEGER;
let left =0 , right = height.length -1;
while(left < right) {
const h = Math.min(height[left], height[right])
const width = right - left;
max = Math.max(max, h * width);
if(height[left] > height[right]) {
right--;
} else {
left++;
}
}
return max;
};
- 처음에는 앞에서 두 포인터를 시작하려고 했는데, 이건 보통 연속된 구간이나 서브 시퀀스를 구할 때 이렇게 한다고 한다.
- 이 경우는 두 구간 사이의 넓이가 필요하므로 양쪽 끝에서 포인터를 좁혀가며 넓이를 확인해야 한다.
- 넓이의 경우, 두 라인 중 더 짧은 높이 * 두 인덱스의 차이로 구할 수 있다.