BOJ 14719 빗물

메모리 : 11792 KB

시간 : 104 ms

BOJ 14719 빗물 Gold 5


풀이

  1. 현재 위치(i)에서 왼쪽으로 가장 높은 블록, 오른쪽으로 가장 높은 블록을 찾아준다.
  2. 왼쪽, 오른쪽 중 작은 값 - 현재 위치의 블록 의 값을 더해준다.


느낀점

if문으로 비교하는 거랑 Math.max랑 누가 더 빠를까 궁금했는데
if문으로 했을때 100ms 나왔고 Math.max는 104ms 나왔다.
if문으로 하면 코드가 조금 길어지지만.. 조금 더 잘 써야겠다.


코드

import java.io.*;
import java.util.*;

public class Main {
	static int H, W, left, right, sum;
	static int[] blocks;
	public static void main(String[] args) throws IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		StringTokenizer st = new StringTokenizer(br.readLine());
		H = Integer.parseInt(st.nextToken());
		W = Integer.parseInt(st.nextToken());
		blocks = new int[W];
		st = new StringTokenizer(br.readLine());
		for (int i = 0; i < W; i++) {
			blocks[i] = Integer.parseInt(st.nextToken());
		}
		
		for (int i = 0; i < blocks.length; i++) {
			left = right = 0;
			
			for (int j = i; j >= 0; j--) {
				if (blocks[j] > left) {
					left = blocks[j];
				}
			}
			for (int j = i; j < blocks.length; j++) {
				if (blocks[j] > right) {
					right = blocks[j];
				}
			}
			
			sum += Math.abs(Math.min(left, right) - blocks[i]);
		}
		
		System.out.println(sum);
	}
}