-
백준 6549 - 히스토그램에서 가장 큰 직사각형, C++, 스택쾌락없는 책임 (공부)/알고리즘 문제풀이 2021. 11. 13. 19:14반응형
#include <iostream> #include <stack> #include <algorithm> using namespace std; long long n; long long hist[100010]; int main(){ ios_base :: sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL); while(true){ cin >> n; if(n <= 0) break; for(int i = 0; i < n; i++) cin >> hist[i]; hist[n] = -1; stack<int> s; long long ans = 0; for(int i = 0; i <= n; i++){ // hist[i] < hist[s.top()] && !s.empty() => ? while(!s.empty() && hist[i] < hist[s.top()]){ int height, weight; height = s.top(); s.pop(); if(s.empty()) weight = i; else weight = i - s.top() - 1; ans = max(ans, hist[height] * weight); } s.push(i); } cout << ans << '\n'; } }
옛날 히스토그램 문제를 푼거와 비슷하게 했습니다. 순차대로 막대를 넣는데 새로 들어오는 막대가 이전의 막대보다 작다면 사각형을 만들 수 없는걸 이용한 풀이입니다.
위에 와일문 조건 체크에서 스택이 비어있는걸 먼저 확인해샤 세그먼트 오류가 안나오는 문제였습니다. 이 오류때문에 고생좀 했습니다...
반응형'쾌락없는 책임 (공부) > 알고리즘 문제풀이' 카테고리의 다른 글
백준 2251 - 줄 세우기, C++, 위상정렬 (0) 2021.11.18 백준 6087 - C++, BFS (0) 2021.11.15 백준 11000 - 강의실 배정, C++, 우선순위 큐, 그리디 (0) 2021.11.11 백준 1655 - 가운데를 말해요, C++, 우선순위 큐 (0) 2021.11.10 백준 11049 - 행렬 곱셈 순서, C++, DP (0) 2021.11.04