선택은 나의 것

[BOJ 백준] 6549번 히스토그램에서 가장 큰 직사각 본문

☽ Algorithm/BOJ

[BOJ 백준] 6549번 히스토그램에서 가장 큰 직사각

Algoribi 2021. 7. 14. 17:00

문제

BOJ number : https://www.acmicpc.net/problem/6549

 

6549번: 히스토그램에서 가장 큰 직사각형

입력은 테스트 케이스 여러 개로 이루어져 있다. 각 테스트 케이스는 한 줄로 이루어져 있고, 직사각형의 수 n이 가장 처음으로 주어진다. (1 ≤ n ≤ 100,000) 그 다음 n개의 정수 h1, ..., hn (0 ≤ hi ≤

www.acmicpc.net

접근

백준 1725번 히스토그램 문제와 풀이방법이 똑같은 문제이다. 

 

[BOJ 백준] 1725번 히스토그램

문제 BOJ 1725 : https://www.acmicpc.net/problem/1725 1725번: 히스토그램 첫 행에는 N (1 ≤ N ≤ 100,000) 이 주어진다. N은 히스토그램의 가로 칸의 수이다. 다음 N 행에 걸쳐 각 칸의 높이가 왼쪽에서부터..

algoribi.tistory.com

코드

#include<algorithm>
#include<iostream>
#include<stack>
#define endl "\n"

using namespace std;

long long ans = 0, top, arr[100005];
stack<long long> s;

int main() {
    while(1) {
        int n, top;
        cin >> n;
        if (n == 0)
            break;
        s.push(0);
        arr[0] = 0;
        arr[n + 1] = 0;

        for (int i = 1; i <= n; i++)
            cin >> arr[i];

        for (int i = 1; i <= n + 1; i++) {
            while (!s.empty() && arr[s.top()] > arr[i]) {
                top = s.top();
                s.pop();
                ans = max(ans, arr[top]*(i - s.top() - 1));
            }
            s.push(i);
        }
        cout << ans << endl;
        while(!s.empty())
            s.pop();
        ans = 0;
    }
}

 

깃 허브 주소 : https://github.com/algoribi/algorithm-study

'☽ Algorithm > BOJ' 카테고리의 다른 글

[BOJ 백준] 14426번 접두사 찾기  (0) 2021.07.16
[BOJ 백준] 1701번 Cubeditor  (0) 2021.07.15
[BOJ 백준] 1725번 히스토그램  (0) 2021.07.13
[BOJ 백준] 12764번 싸지방에 간 준하  (0) 2021.07.12
[BOJ 백준] 17609번 회문  (0) 2021.07.07
Comments