1. 문제 조건
- 입력
기둥 수 N ( 1이상 1000이하)
각 기둥의 왼쪽 면의 위치를 나타내는 정수 L & 높이 H
- 문제 설명
주어진 막대기둥을 포함하는 다각형의 가장 작은 면적을 구해야 한다.
창고다각형은 아래 조건을 충족시켜야 한다.
2. 아이디어
3. 구현
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Stack;
import java.util.StringTokenizer;
public class Main {
public static void main(String[] args) throws NumberFormatException, IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st;
Stack<Integer> stack = new Stack<>();
int N = Integer.parseInt(br.readLine());
int[] height = new int[1001];
int last = 0;
int max = 0;
int maxIdx =0;
for(int i=0; i<N; i++) {
st = new StringTokenizer(br.readLine());
int L = Integer.parseInt(st.nextToken());
int H = Integer.parseInt(st.nextToken());
height[L] = H;
if(last<L) last = L;
if(max<H) {
max = H; maxIdx = L;
}
}
int temp = 0;
int cnt = 0;
for(int i=0; i<last+1; i++) {
if(i>maxIdx) {
stack.add(height[i]);
}else {
if(temp <=height[i]) {
temp=height[i];
}
stack.add(temp);
}
}
int area = 0;
temp =0;
for(int i=0; i<last+1; i++) {
if(i<last+1-maxIdx) {
if(temp <= stack.peek()) {
temp = stack.pop();
}else {
stack.pop();
}
area+= temp;
}else {
area+= stack.pop();
}
}
System.out.println(area);
}
}
'Learning-log > Algorithm 문풀' 카테고리의 다른 글
(Java)백준 24060 알고리즘 수업 - 병합 정렬 1 (0) | 2023.03.26 |
---|---|
(Java)백준 Queen 9663.N-Queen (0) | 2023.03.23 |
(Java) SWEA 7964. 부먹왕국의 차원관문 (0) | 2023.03.20 |
(Java) SWEA 1860. 진기의 최고급 붕어빵 풀이(2023-02-24) (0) | 2023.02.26 |
백준(파이썬, python) - 2581번 소수 (2022.11.07) (0) | 2022.11.07 |