
문제
빗물
풀이
- 빗물이 쌓이는 범위는 1 부터 w - 1이다. 왜냐하면 마지막 부분과 끝 부분은 항상 닫혀있어야 쌓이기 때문이다.
for (int i = 1; i < w - 1; i++) {
int left_max = 0, right_max = 0;
...
...
}
- 현재 위치에서 왼쪽 까지 가장 높은 위치에 있는 것을 left_max라하고, 현재 위치에서 오른쪽에 있는 것을 right_max라 하고 그 값을 비교한 값을 산정합니다.
for (int j = 0; j < w; j++) {
if (j <= i) {
left_max = Math.max(left_max, arr[j]);
} else {
right_max = Math.max(right_max, arr[j]);
}
}
- 2번에서 비교한 값중 가장 낮은 값만큼 쌓이게 되는데 현재 블럭위 위치보다 높을 경우에만 빗물이 쌓이게 될것입니다.
int compare = Math.min(left_max, right_max);
if (arr[i] < compare) {
answer += compare - arr[i];
}
전체 코드
전체 코드