문제풀이

[백준] 14719 빗물 - Java

자르비옹스 2022. 1. 29. 00:26

https://www.acmicpc.net/problem/14719

 

14719번: 빗물

첫 번째 줄에는 2차원 세계의 세로 길이 H과 2차원 세계의 가로 길이 W가 주어진다. (1 ≤ H, W ≤ 500) 두 번째 줄에는 블록이 쌓인 높이를 의미하는 0이상 H이하의 정수가 2차원 세계의 맨 왼쪽 위치

www.acmicpc.net

풀이는 간단하다.

현재 인덱스 기준으로 왼쪽, 오른쪽 각각 가장 높은 층을 구한 뒤, 차이를 더해준다.

 

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;

public class Main {

	public static void main(String[] args) throws IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		StringTokenizer st = new StringTokenizer(br.readLine());
		
		int H = Integer.parseInt(st.nextToken());
		int W = Integer.parseInt(st.nextToken());
		int[] arr = new int[W];
		

		st =  new StringTokenizer(br.readLine());
		for (int i = 0; i < W; i++) {
			arr[i] = Integer.parseInt(st.nextToken());
		}
		
		int answer = 0;
		for (int i = 1; i < W-1; i++) {
			int left = 0;
			int right= 0;
			int cIdx = i;
			while(cIdx > 0) {
				// 왼쪽 찾기
				left = Math.max(left, arr[--cIdx]);
			}
			cIdx = i;
			while(cIdx < W-1) {
				// 오른쪽 찾기
				right = Math.max(right, arr[++cIdx]);
			}
			
			int temp =Math.min(left, right) - arr[i]; 
			answer += temp > 0 ? temp : 0;
		}
		System.out.println(answer);
	}

}