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;
}
}
반응형
'알고리즘 공부' 카테고리의 다른 글
[leetcode - 167. Two Sum II - Input Array Is Sorted] java (0) | 2025.02.05 |
---|---|
[leetcode - 6. Zigzag Conversion] java (0) | 2025.01.31 |
[백준 22866번] 탑 보기 - java (0) | 2025.01.31 |
[leetcode - 68. Text Justification] java (0) | 2025.01.31 |
[leetcode - 42. Trapping Rain Water] java (0) | 2025.01.30 |