알고리즘 공부
백준 빗물
컴퓨터과학
2024. 2. 11. 22:52
https://www.acmicpc.net/problem/14719
14719번: 빗물
첫 번째 줄에는 2차원 세계의 세로 길이 H과 2차원 세계의 가로 길이 W가 주어진다. (1 ≤ H, W ≤ 500) 두 번째 줄에는 블록이 쌓인 높이를 의미하는 0이상 H이하의 정수가 2차원 세계의 맨 왼쪽 위치
www.acmicpc.net
설이라 좀 많이 쉬었네요 ㅎㅎ
그 뭔가 이 문젠 구현 문제보단 그리드문제에 좀더 가까운것같네요... 어렵더군요 ㅠ
키 포인트는 가장 왼쪽벽, 가장 오른쪽 큰벽을 구한다음에 현재 블록에서 두개의 왼,오른쪽의 높은값중 가장 낮은 높이차를 구한후 합하는게 포인트입니다.
package test01;
import java.util.*;
public class Main {
public static void main(String[] args) throws Exception {
Scanner scan=new Scanner(System.in);
int h=scan.nextInt();//4
int w=scan.nextInt();//8
int block[]=new int[w];
int start=0;
int end=0;
int min=0;
for(int i=0;i<w;i++) {
block[i]=scan.nextInt();
}
int answer = 0;
for (int i = 1; i < w - 1; i++) {
int leftMax = 0;
int rightMax = 0;
for (int j = 0; j < i; j++) {
leftMax = Math.max(leftMax, block[j]);
}
for (int j = i + 1; j < w; j++) {
rightMax = Math.max(rightMax, block[j]);
}
int water = Math.min(leftMax, rightMax) - block[i];
if (water > 0) {
answer += water;
}
}
System.out.println(answer);
}
}