알고리즘 공부

백준 빗물

컴퓨터과학 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);
        
    }
    
}