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?