백준 14719번 : 빗물 | 자바 풀이

박지윤·2022년 7월 16일
0

Algorithm_Implementation

목록 보기
10/16

[ 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);
    }
}

현재 벽을 기준으로 왼쪽 벽의 최대 높이와 오른쪽 벽의 최대 높이를 구한 뒤, 현재 벽보다 높은 벽이 양쪽에 있을 경우, 높이가 더 낮은 벽과 현재 벽과의 높이의 차를 구해서 구하고자 하는 값에 더해주면 된다.

0개의 댓글