Approach

  • 요소의 크기가 2보다 작으면 물을 받을 수 있는 공간이 없기때문에 0을 바로 반환한다.
  • start 변수의 값을 0으로해서 height의 처음부터 값을 비교할 수 있도록한다.
  • height[start]값보다 height[i]의 값이 크거나 같을 경우.
    • start와 i 사이에 있는 공간에 빗물을 받을 수 있는 공간이 존재한다.
    • height[start]의 값을 value 변수에 저장한다.
    • start가 i보다 작다면 count변수에 value에다가 height[start]값만큼 빼서 더해준다.
      • start와 i 사이에는 height[start]보다 작은 값들이 존재한다. 그렇기 때문에 각 start 인덱스 벽의 크기에 height[start]보다 작은 벽의 크기를 빼주면 빗물이 고일 정도의 공간을 확인 할 수 있다.
  • 만약 마지막 요소의 값이 height중에서 가장 크다면 상관없지만 그렇지 않다면 위의 방법을 똑같이 맨뒤에서부터 실행하여 더해준다.

Code

class Solution {
public:
    int trap(vector<int>& height) {
        int start = 0, count = 0;

        if(height.size() < 2) return count;

        for(int i = 1; i < height.size(); i++)
        {
            if(height[start] <= height[i])
            {
                int value = height[start++];
                while(start<i)
                {
                    count += value - height[start++];
                }
            }
        }

        int top = height.size() - 1;

        for(int i = top-1; i >= start; i--)
        {
            if(height[top] <= height[i])
            {
                int value = height[top--];
                while(top>i)
                {
                    count += value - height[top--];
                }
            }
        }

        return count;
    }
};

Result

profile
누누의 잡다저장소

0개의 댓글

관련 채용 정보