https://www.acmicpc.net/problem/14719
14719번: 빗물
첫 번째 줄에는 2차원 세계의 세로 길이 H과 2차원 세계의 가로 길이 W가 주어진다. (1 ≤ H, W ≤ 500) 두 번째 줄에는 블록이 쌓인 높이를 의미하는 0이상 H이하의 정수가 2차원 세계의 맨 왼쪽 위치
www.acmicpc.net
public class 빗물 {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
빗물 service = new 빗물();
System.out.println(
service.solution(Integer.parseInt(st.nextToken()), Integer.parseInt(st.nextToken()), br.readLine()));
}
public int solution(int H, int W, String block) {
int answer = 0;
StringTokenizer st = new StringTokenizer(block);
int arr[] = new int[W];
for (int i = 0; i < W; i++) {
arr[i] = Integer.parseInt(st.nextToken());
}
int left, right;
for (int i = 1; i < arr.length - 1; i++) {
left = right = arr[i];
// 왼쪽 벽의 최댓값
for (int j = 0; j < i; j++) {
if (left < arr[j])
left = arr[j];
}
// 오른쪽 벽의 최댓값
for (int j = i + 1; j < arr.length; j++) {
if (right < arr[j])
right = arr[j];
}
answer += Math.min(left, right) - arr[i];
}
return answer;
}
}
1. 블록을 저장하는 배열을 선언합니다.
2. 양 끝에는 물이 고이지 않습니다.
3. 현재 위치를 기준으로 양쪽벽의 최댓값을 구합니다.
4. left, right의 초기화를 자신을 기준으로 했어서 가장 낮은 벽을 기준으로 빼줍니다.
'알고리즘' 카테고리의 다른 글
[백준] 여행가자 1976 - java (0) | 2021.07.02 |
---|---|
[백준] 2615 오목 - java (0) | 2021.06.29 |
[백준] 20057 마법사 상어와 토네이도 - java (0) | 2021.06.27 |
[백준] 21610 마법사 상어와 비바라기 - java (2) | 2021.06.25 |
[프로그래머스] 문자열 내 마음대로 정렬하기 - java (0) | 2021.06.24 |