빗물
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;
}
}