2차원 세계에 블록이 쌓여있다. 비가 오면 블록 사이에 빗물이 고인다.
비는 충분히 많이 온다. 고이는 빗물의 총량은 얼마일까?
첫 번째 줄에는 2차원 세계의 세로 길이 H과 2차원 세계의 가로 길이 W가 주어진다. (1 ≤ H, W ≤ 500)
두 번째 줄에는 블록이 쌓인 높이를 의미하는 0이상 H이하의 정수가 2차원 세계의 맨 왼쪽 위치부터 차례대로 W개 주어진다.
따라서 블록 내부의 빈 공간이 생길 수 없다. 또 2차원 세계의 바닥은 항상 막혀있다고 가정하여도 좋다.
2차원 세계에서는 한 칸의 용량은 1이다. 고이는 빗물의 총량을 출력하여라.
빗물이 전혀 고이지 않을 경우 0을 출력하여라.
위와 같은 예제에서 다음과 같은 순서로 빗물이 고일 수 없는 부분을 체크
#include <iostream>
using namespace std;
int arr[501][501];
int main() {
int H, W;
cin >> H >> W;
int n;
for(int j=0; j<W; ++j) {
cin >> n;
for(int i=0; i<n; ++i) {
arr[i][j] = 1;
}
}
for(int i=H-1; i>=0; --i) {
int l = 0, r = W-1;
if(arr[i][l] == 1 && arr[i][r] == 1) break;
while(arr[i][l] == 0) {
arr[i][l] = -1;
l++;
}
while(arr[i][r] == 0) {
arr[i][r] = -1;
r--;
}
}
int answer = 0;
for(int i=0; i<H; ++i) {
for(int j=0; j<W; ++j) {
if(arr[i][j] == 0) answer++;
}
}
cout << answer;
return 0;
}