알고리즘/BOJ

백준 1725번 히스토그램

꾸준함. 2018. 9. 8. 01:23

문제 링크입니다: https://www.acmicpc.net/problem/1725


Algospot FENCE(http://jaimemin.tistory.com/567)와 동일한 문제였습니다.


#include <iostream>

#include <vector>

#include <algorithm>

#include <stack>

using namespace std;

 

int N;

 

int main(void)

{

        ios_base::sync_with_stdio(0);

        cin.tie(0);

        cin >> N;

 

        vector<int> height(N);

        for (int i = 0; i < N; i++)

                 cin >> height[i];

 

        //제일 끝 울타리 높이가 i번째 울타리 높이보다 작아야 범위가 설정됨

        height.push_back(0);

        stack<int> remaining;

 

        int result = 0;

        for (int i = 0; i < height.size(); i++)

        {

                 //남아있는 판자들 중 오른쪽 끝 판자가 height[i]보다 높다면

                 //이 판자의 최대 사각형은 i에서 끝난다

                 while (!remaining.empty() && height[remaining.top()] >= height[i])

                 {

                         int idx = remaining.top();

                         remaining.pop();

 

                         int width;

                         //idx번쨰 판자 왼쪽에 판자가 하나도 안 남아있는 경우

                         if (remaining.empty())

                                 width = i;

                         //남아 있는 판자 중 가장 오른쪽에 있는 판자 번호

                         else

                                 width = (i - remaining.top() - 1);

 

                         result = max(result, height[idx] * width);

                 }

                 remaining.push(i); //스택에 집어넣는다

        }

 

        cout << result << "\n";

        return 0;

}


개발환경:Visual Studio 2017


지적, 조언, 질문 환영입니다! 댓글 남겨주세요~

반응형

'알고리즘 > BOJ' 카테고리의 다른 글

백준 1935번 후위표기식2  (0) 2018.09.08
백준 1918번 후위표기식  (2) 2018.09.08
백준 3986번 좋은 단어  (0) 2018.09.08
백준 12931번 두 배 더하기  (0) 2018.09.08
백준 5397번 키로거  (2) 2018.09.07