막대기 2개로 둘러쌓인 부분의 넓이를 구하는 것이 문제이다.
작은 길이의 막대기가 기준이 되어 넓이가 구해지는 것이 문제의 포인트이다.
왼쪽 막대기의 위치를 l 오른쪽 막대기의 위치를 r로 두고, 왼쪽과 오른쪽 중 작은 길이의 막대기를 한칸씩 옮겨서 넓이의 최대값을 찾는다. 작은 것은 옮기는 이유는 더 큰 넓이가 되기 위해서는 작은 길이의 막대기가 길어져야되기 때문이다.
class Solution {
public int maxArea(int[] height) {
int l = 0;
int r = height.length - 1;
int max = (r - l) * Math.min(height[l], height[r]);
while (l < r) {
if (height[l] <= height[r]) {
l++;
} else {
r--;
}
max = Math.max((r - l) * Math.min(height[l], height[r]), max);
}
return max;
}
}
반응형
'Algorithm > LeetCode' 카테고리의 다른 글
[Java] LeetCode 17번 Letter Combinations of a Phone Number (0) | 2021.09.26 |
---|---|
[Java] LeetCode 15번 3Sum (0) | 2021.09.26 |
[Java] LeetCode 10번 Regular Expression Matching (0) | 2021.09.26 |
[Java] LeetCode 5번 Longest Palindromic Substring (0) | 2021.09.25 |
[Java] LeetCode 4번 Median of Two Sorted Arrays (0) | 2021.09.25 |