[ Solution ]
package implement14719;
import java.util.*;
import java.io.*;
public class Main {
public static void main(String[] args) throws IOException {
Scanner sc = new Scanner(System.in);
int H = sc.nextInt();
int W = sc.nextInt();
int [] arr = new int[W];
int water = 0;
for(int i = 0; i < W; i++) {
arr[i] = sc.nextInt();
}
for(int i = 1; i < W-1; i++) {
int current = arr[i]; // 현재 벽 높이
int leftMax = current; // 왼쪽 벽 최대 높이
int rightMax = current; // 오른쪽 벽 최대 높이
for(int j = i-1; j >= 0; j--) {
if(arr[j] > current) { // 왼쪽 벽 최대 높이 탐색
leftMax = Math.max(leftMax, arr[j]);
}
}
for(int j = i+1; j < W; j++) {
if(arr[j] > current) { // 오른쪽 벽 최대 높이 탐색
rightMax = Math.max(rightMax, arr[j]);
}
}
if(Math.min(leftMax, rightMax) > current) { // 현재 벽보다 높은 벽이 양쪽에 있을 경우
water += (Math.min(leftMax, rightMax) - arr[i]); // 더 작은 벽의 높이에서 현재 벽의 높이를 뺀 값을 더해주기
}
}
System.out.println(water);
}
}
현재 벽을 기준으로 왼쪽 벽의 최대 높이와 오른쪽 벽의 최대 높이를 구한 뒤, 현재 벽보다 높은 벽이 양쪽에 있을 경우, 높이가 더 낮은 벽과 현재 벽과의 높이의 차를 구해서 구하고자 하는 값에 더해주면 된다.