[BOJ] 히스토그램
Date:
[BOJ] 히스토그램
Problem URL : 히스토그램
#include<iostream>
#include<stack>
using namespace std;
int main() {
int n, hList[100000];
scanf("%d", &n);
stack<int> s;
long long maxArea = 0;
long long area;
s.push(0);
for (int i = 1; i <= n; i++) {
scanf("%d", &hList[i]);
while (s.size() > 1 && hList[s.top()] >= hList[i]) {
int height = hList[s.top()];
s.pop();
// height 로 만들 수 있는 최대 사각형 넓이
area = (i - 1 - s.top()) * height;
maxArea = maxArea < area ? area : maxArea;
}
s.push(i);
}
while (s.size() > 1) {
//남은 stack의 원소들이 오름차순이기에
//그래프 끝까지가 사각형 밑변의 길이가 된다.
int height = hList[s.top()];
s.pop();
area = (n - s.top()) * height;
maxArea = maxArea < area ? area : maxArea;
}
printf("%lld\n", maxArea);
}
댓글