알고리즘/구현

[백준] 14719번: 빗물 - java

아뵹젼 2023. 7. 7.

 

1. 왼쪽 -> 오른쪽으로 벽의 최대 높이를 저장한다.

이때 비교하는 벽의 기준의 height(지금까지 중 가장 높은 블럭) 이다. 

2. 오른쪽 -> 왼쪽으로 벽의 최대 높이를 저장한다.

1 과 2 에서 저장된 높이 중 더 작은 높이를 벽의 높이로 저장하며,

빗물이 고인 양을 구하기 위해 [ 블록 높이 - 벽높이 ] 로 계산한다.

 

 

나의코드

import java.io.*;
import java.util.StringTokenizer;

public class Main {
    static int h, w, height, answer, blocks[], rain[];

    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
//        StringBuilder sb = new StringBuilder();
        StringTokenizer st = new StringTokenizer(br.readLine());
        h = Integer.parseInt(st.nextToken());
        w = Integer.parseInt(st.nextToken());
        st = new StringTokenizer(br.readLine());
        blocks = new int[w];
        rain = new int[w];
        height = 0;
        for(int i = 0; i<w; i++){
            blocks[i] = Integer.parseInt(st.nextToken());
            height = Math.max(height, blocks[i]);
            rain[i] = height;
        }
        height = 0;
        for(int i=w-1; i>=0; i--){
            height = Math.max(height, blocks[i]);
            rain[i] = Math.min(rain[i], height);
            answer += (rain[i] - blocks[i]);
        }

        bw.write(Integer.toString(answer));
        bw.flush();
        bw.close();
    }
}

댓글