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?