빗물

빗물

2차원 세계에 블록이 쌓여있다. 비가 오면 블록 사이에 빗물이 고인다.

비는 충분히 많이 온다. 고이는 빗물의 총량은 얼마일까?

입력

첫 번째 줄에는 2차원 세계의 세로 길이 H과 2차원 세계의 가로 길이 W가 주어진다. (1 ≤ H, W ≤ 500)

두 번째 줄에는 블록이 쌓인 높이를 의미하는 0이상 H이하의 정수가 2차원 세계의 맨 왼쪽 위치부터 차례대로 W개 주어진다.

따라서 블록 내부의 빈 공간이 생길 수 없다. 또 2차원 세계의 바닥은 항상 막혀있다고 가정하여도 좋다.

https://www.acmicpc.net/problem/14719


import java.util.*;

public class Main65_bg {

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);


        String[] temp = sc.nextLine().split(" ");
        int[] c = new int[]{Integer.parseInt(temp[0]), Integer.parseInt(temp[1])};

        temp = sc.nextLine().split(" ");
        int[] data = new int[temp.length];
        for (int i = 0; i < temp.length; i++) {
            data[i] = Integer.parseInt(temp[i]);
        }
        

        var reuslt = solution(c, data);
    }

    public static int solution(int[] size, int[] data) {
        int result = 0;

        int[][] board = new int[size[0]][size[1]];

        for (int i = 0; i < data.length; i++) {
            int currentD = data[i];
            for (int l = 0; l < currentD; l++) {
                board[l][i] = 1;
            }
        }

        for (int i = 0; i < board.length; i++) {
            int[] currentRow = board[i];

            boolean save = false;
            int currentDim = 0;
            for (int l = 0; l < currentRow.length; l++) {
                int currentCell = currentRow[l];
                if (currentCell == 1) {
                    save = true;
                }

                if (save && currentCell == 0) {
                    currentDim++;
                }

                if(save && currentCell == 1) {
                    result += currentDim;
                    currentDim = 0;
                }


            }
        }

        System.out.println(result);

        return 0;
    }
}