

-Code
import java.io.*;
import java.util.*;
public class BOJ2304 {
static int[] storage = new int[1001];
public static void main(String[] args) throws IOException {
BufferedReader br =
new BufferedReader(new InputStreamReader(System.in));
int cnt = Integer.parseInt(br.readLine());
int maxPos = 0, maxHeight = 0;
int startPos = 1001;
int endPos = 0;
for (int i = 0; i < cnt; i++) {
StringTokenizer st = new StringTokenizer(br.readLine());
int pos = Integer.parseInt(st.nextToken());
int height = Integer.parseInt(st.nextToken());
// 높이 저장
storage[pos] = height;
// 최대 높이 및 위치 저장
if (maxHeight < height) {
maxPos = pos;
maxHeight = height;
}
// 시작점과 종료 시점 저장
startPos = Math.min(startPos, pos);
endPos = Math.max(endPos, pos);
}
br.close();
int answer = 0;
// 왼쪽 구역 구하기
int leftMax = 0;
for (int i = startPos; i < maxPos; i++) {
leftMax = Math.max(leftMax, storage[i]);
answer += leftMax;
}
// 오른쪽 구역 구하기
int rightMax = 0;
for (int i = endPos; i > maxPos; i--) {
rightMax = Math.max(rightMax, storage[i]);
answer += rightMax;
}
// 최고점 부분 넓이 추가
answer += maxHeight;
System.out.println(answer);
}
}
왼쪽 부분은 크기가 지나온 기둥의 최대 높이만큼 더해주는 것으로 새웠지만 오른쪽 부분은 왼쪽과 똑같이 오른 차순으로 진행하려고 해서 문제가 생겼습니다. 그래서 역순으로 왼쪽과 똑같이 해봐라 라는 힌트를 보고 해결했습니다.
'Beakjoon&프로그래머스 > Java' 카테고리의 다른 글
| [백준/Java] 10181번 Federation Favorites (0) | 2026.03.07 |
|---|---|
| [백준/Java] 31416번 가상 검증 기술 (0) | 2026.03.06 |
| [백준/Java] 1522번 문자열 교환 (0) | 2026.03.05 |
| [백준/Java] 26577번 Math (0) | 2026.03.05 |
| [백준/Java] 1138번 한 줄로 서기 (0) | 2026.03.05 |