Skip to content

Commit ff8a468

Browse files
add: 물담기
1 parent b4b8026 commit ff8a468

File tree

1 file changed

+63
-0
lines changed

1 file changed

+63
-0
lines changed
Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
1+
// tc: O(n)
2+
// 투 포인터라는 문제풀이 방법으로 간단히 (답지보고) 해결...
3+
class Solution {
4+
public int maxArea(int[] h) {
5+
int start = 0;
6+
int end = h.length - 1;
7+
int mx = -987654321;
8+
9+
while(start < end) {
10+
mx = Math.max(mx, (end - start) * Math.min(h[start], h[end]));
11+
12+
if(h[start] < h[end]) {
13+
start++;
14+
} else {
15+
end--;
16+
}
17+
}
18+
19+
return mx;
20+
}
21+
}
22+
23+
24+
// 예외처리가 덕지덕지 붙기 시작할 때. (잘못됨을 깨닫고)다른 방법으로 풀어햐 하는건 아닌지 생각하는 습관 필요함..ㅠ
25+
class WrongSolution {
26+
public int maxArea(int[] h) {
27+
int mx = Math.min(h[0], h[1]);
28+
int idx = 0;
29+
30+
for(int i = 1; i < h.length; i++) {
31+
int offset = i - idx;
32+
33+
int prevCalc = Math.min(h[i - 1], h[i]);
34+
int calc = Math.min(h[idx], h[i]);
35+
int newMx = calc * offset;
36+
37+
// 새롭게 인덱스를 바꿔버리는게 더 나을때.
38+
if(prevCalc > newMx) {
39+
idx = i - 1;
40+
mx = Math.max(mx, prevCalc);
41+
continue;
42+
}
43+
44+
// 물을 더 많이 담을 수 있을 때.
45+
if(h[idx] < h[i] && newMx > mx) {
46+
if(i == 2) {
47+
int exc = Math.min(h[1], h[i]) * offset;
48+
if(exc > newMx) {
49+
idx = 1;
50+
mx = Math.max(exc, mx);
51+
continue;
52+
}
53+
}
54+
55+
idx = i;
56+
}
57+
58+
mx = Math.max(newMx, mx);
59+
}
60+
61+
return mx;
62+
}
63+
}

0 commit comments

Comments
 (0)