TrappingRainWater
Given n
non-negative integers representing an elevation map where the width of each bar is 1
, compute how much water it can trap after raining.

ํ์ํ ์๋ฃ๊ตฌ์กฐ : ์ ์ํ ๋ฐฐ์ด 2๊ฐ (left[ ], right[ ])
์๊ณ ๋ฆฌ์ฆ 1. ์ผ์ชฝ ๋ฒฝ(left)๊ณผ ์ค๋ฅธ์ชฝ ๋ฒฝ(right)์ ๊ตฌํ๋ค. - ์ ์ํ ๋ฐฐ์ด left[ ], right[ ] ์์ฑ. 2. left์ right ์ค ์์ ๊ฐ์ ๊ตฌํ๋ค. ๋ ์ค ์์ ๊ฐ์ ๋์ด๋งํผ ๋ฌผ์ด ์ฐจ๊ธฐ ๋๋ฌธ! - Math.min(l,r) 3. ์์ ์ ๋ฒฝ ๋์ด๋งํผ ๋บ๋ค. => result += Math.min(left[i],right[i]) - height[i]
์๊ณ ๋ฆฌ์ฆ์ java์ธ์ด๋ก ๊ตฌํ
class Solution {
public int trap(int[] height) {
int result = 0;
//0.๊ธฐ์ ์ฌ๋ก ์ ์ธ!
if(height==null || height.length <= 2)
return result;
//1.๋ด์ ๊ทธ๋ฆ ์์ฑ
int[] left = new int[height.length];
int[] right = new int[height.length];
//2. left์ right ๋ฐฐ์ด์ ๋ฐ์ดํฐ ๋ฃ๊ธฐ
int max = height[0];
left[0] = height[0];
for(int i=1; i< height.length; i++) {
if(max < height[i]) {
max = height[i];
left[i] = height[i];
}
else {
left[i] = max;
}
}
max = height[height.length-1];
right[height.length-1] = height[height.length-1];
for(int i=height.length-2; i >= 0; i--) {
if(max < height[i]) {
max = height[i];
right[i] = height[i];
}
else {
right[i] = max;
}
}
//3. left์ right ๋์ค ์์ ๊ฐ์ ์ ํ!
//์์ ์ ๋์ด๋งํผ ๋บ ๊ฐ๋ค์ ๋ํ ๊ฒ์ด result๊ฐ ๋๋ค!
for(int i=0;i < height.length;i++) {
result += Math.min(left[i],right[i]) - height[i];
}
return result;
}
}
Last updated
Was this helpful?