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();
}
}
'알고리즘 > 구현' 카테고리의 다른 글
[백준] 2933번 : 미네랄 - java (0) | 2023.04.03 |
---|---|
[swea] 2383번: 점심 식사시간 - java (0) | 2023.03.06 |
[백준] 17143번: 낚시왕 - java (0) | 2023.03.02 |
[백준] 19237번: 어른 상어 - 파이썬(python) (0) | 2022.10.25 |
[프로그래머스] 괄호 변한 - 파이썬(python) (0) | 2022.10.07 |
댓글