일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- VIM
- network
- DFS
- react
- db
- Graph
- vscode
- 동적 계획법
- LeetCode
- java
- frontend
- 리트코드
- Redux
- 그레이들
- Database
- Python
- Data Structure
- Algorithm
- git
- 알고리즘
- BFS
- 다이나믹 프로그래밍
- 백준
- TypeScript
- 안드로이드
- DP
- Javascript
- CS
- 자바
- 프로그래머스
- Today
- Total
늘 겸손하게
LeetCode Q - Container With Most Water (Java) 본문
February LeetCoding Challenge 2021 ( Week 3, day 17 )
Q : Container With Most Water
문제 해설
길이가 n인 음수가 아닌 정수형 배열 height의 각각의 원소의 인덱스와 원소 값은 좌표 (i, ai)를 이룬다.
좌표위에는 길이가 (i,ai) - (i,0) 인 n개의 수직선들이 그려진다.
두 개의 수직선을 골라 물을 담을 수 있는 컨테이너를 만들 수 있는데, 물을 최대한 많이 담을 수 있는 컨테이너가 생성되는 두 개의 수직선을 골라라.
제한 사항
- n == height.length
- 2 <= n <= 3 * 10^4
- 0 <= height[i] <= 3 * 10^4
문제 풀이
단순 무식하게 이중 포문을 만들어 해결할 수도 있지만,
Two pointer method 를 이용하는 더 효율적인 방법이 존재합니다.
1. 배열의 첫 번째 인덱스를 가리키는 포인터 pl , 배열의 마지막 인덱스를 가리키는 포인터 pr, 물을 담는 컨테이너의 넓이를 저장할 변수 max_contain 를 준비합니다.
2. 첫 번째 원소와 마지막 원소를 수직선으로 하는 컨테이너가 담을 수 있는 물의 넓이를 저장합니다.
3. pl 이 가리키는 원소가 pr 이 가리키는 원소보다 작다면 pl을 오른쪽으로 이동시킵니다.
더 크다면, pr을 왼쪽으로 이동시킵니다.
4. 바뀐 수직선으로 생성한 컨테이너의 넓이가 이전에 만들어진 컨테이너의 넓이보다 크다면 바꿉니다.
5. 3번, 4번 과정을 pl > pr 되기 전까지 반복합니다.
- java 코드
보기가 좀 안 좋군요
1
2
3
4
5
6
7
8
9
10
11
12
13
|
class Solution {
public int maxArea(int[] height) {
int pl = 0 , pr = height.length - 1 , max_contain = 0;
do {
max_contain = Math.max(max_contain, (pr - pl) * Math.min(height[pr], height[pl]));
if (height[pl] < height[pr]) {
pl++;
} else
pr--;
} while(pl < pr);
return max_contain;
}
}
|
cs |
결과
Runtime : 2 ms , beats 96.04% of java submissions
Memory Usage : 40.3 MB , beats 88.44% of java submissions
수행 시간 : 2 ms, 상위 약 4%
메모리 사용량 : 40.3 MB, 상위 11.6%
최상위권 메모리 사용량도 39.6 MB인것을 감안하면 준수한 결과인것 같습니다.
결론
단순 무식법 (brute force)이 능사는 아닙니다.
'코딩 문제 > LeetCode' 카테고리의 다른 글
LeetCode Q - Broken Calculator ( Java ) (0) | 2021.02.22 |
---|---|
LeetCode Q - Maximum 69 Number (Java) (0) | 2021.02.21 |
Leetcode Q : Letter Case Permutation (Java) (0) | 2021.02.17 |
Leetcode Q : The K Weakest Rows in a Matrix (0) | 2021.02.16 |
Leetcode Q : Valid Anagram (0) | 2021.02.13 |