1. 문제
https://www.acmicpc.net/problem/14719
2. 풀이 과정
처음에 어떤 알고리즘을 쓰지 등 복잡하게 생각하지 않고, 문제만 생각하는 습관을 길러야 될 것 같다.
한 column에서 최대 채울 수 있는 물의 양을 구하는 방법은 아래와 같다.
1. 해당 column 왼쪽과 오른쪽 각각에서 블럭의 최대 높이를 찾기
2. 둘 중 작은 값만큼 채울 수 있음
구현방법
- 해당 column마다 자신의 왼쪽에 있는 블럭 중 최대 높이를 1차원 배열에 저장
- 해당 column마다 자신의 오른쪽에 있는 블럭 중 최대 높이를 구함과 동시에 왼쪽, 오른쪽 중 작은 값만큼 채울 수 있는 빗물 수를 계산한다.
import java.io.BufferedReader;
import java.io.InputStreamReader;
public class Main {
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String inputs[] = br.readLine().split(" ");
int M = Integer.parseInt(inputs[1]);
inputs = br.readLine().split(" ");
int arr[] = new int[M], left[] = new int[M];
int l = 0, r = 0, result = 0;
for(int i=0; i<M; i++){
arr[i] = Integer.parseInt(inputs[i]);
left[i] = Math.max(l, arr[i]);
l = left[i];
}
for(int i=M-1; i>=0; i--){
r = Math.max(r, arr[i]);
result += Math.min(left[i], r) - arr[i];
}
System.out.println(result);
}
}
결과
'코딩문제풀이 > Baekjoon' 카테고리의 다른 글
[Java] 백준 15685번 : 드래곤 커브* (0) | 2022.12.13 |
---|---|
[Java] 백준 2023번 : 신기한 소수 (0) | 2022.12.12 |
[Java] 백준 3190번 : 뱀 (1) | 2022.12.10 |
[Java] 백준 16918번 : 봄버맨 (0) | 2022.12.09 |
[Java] 백준 3665번 : 최종 순위 (0) | 2022.12.08 |