BOJ 14719 빗물
메모리 : 11792 KB
시간 : 104 ms
BOJ 14719 빗물 Gold 5
풀이
- 현재 위치(i)에서 왼쪽으로 가장 높은 블록, 오른쪽으로 가장 높은 블록을 찾아준다.
- 왼쪽, 오른쪽 중 작은 값 - 현재 위치의 블록 의 값을 더해준다.
느낀점
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);
}
}