알고리즘

백준 14719번 빗물 (JAVA)

박카스마시며코딩 2023. 11. 4. 19:42

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

 

14719번: 빗물

첫 번째 줄에는 2차원 세계의 세로 길이 H과 2차원 세계의 가로 길이 W가 주어진다. (1 ≤ H, W ≤ 500) 두 번째 줄에는 블록이 쌓인 높이를 의미하는 0이상 H이하의 정수가 2차원 세계의 맨 왼쪽 위치

www.acmicpc.net

 

저는 구현을 통해 문제를 해결하였습니다.

밑에 경계 밖은 막혀있는 것으로 되어 있기 때문에, 모든 왼쪽부터 오른쪽으로의 벽 사이 간격을 더해 고인 빗물의 총량을 찾았습니다.

 

package BOJ.etc;

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.StringTokenizer;

public class BOJ_14719 {
    public class Test {
        private static final int EMPTY = 0;
        private static final int BLOCK = 1;
        public void main(String[] args) throws Exception {
            BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
            StringTokenizer st = new StringTokenizer(br.readLine());
            int n = Integer.parseInt(st.nextToken());
            int m = Integer.parseInt(st.nextToken());
            int[] height = new int[m];
            st = new StringTokenizer(br.readLine());
            for(int i = 0 ; i < m ; i++){
                height[i] = Integer.parseInt(st.nextToken());
            }
            int result = 0;
            for(int i = 1 ; i <= n ; i++){
                int prevIndex = -1;
                for(int j = 0 ; j < m ; j++){
                    if(height[j] < i){
                        continue;
                    }
                    if(prevIndex != -1){
                        result += j - prevIndex - 1;
                    }
                    prevIndex = j;
                }
            }
            System.out.println(result);
        }

    }
}