본문 바로가기

Problem/ETC

[C/C++] BOJ 1725 :: 히스토그램

 BOJ 1725 :: 히스토그램



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






모르겠어서 다른 분들이 푼 것을 참고하여 풀었다..!...


우선 규칙을 찾아내는 것이 중요한데 나는 규칙을 정말 못찾겠어가지고 ㅠ 못풀었다..


핵심적인 규칙이 되는!! 구해야할 직사각형이 결정되는 순간은

이전의 막대높이보다 현재의 막대높이가 더 낮을 때이다.



stack을 이용하여 O(N) 으로 풀 수 있다!




풀이 과정














나의 코드




Github : https://github.com/j2wooooo/Daliy_Algorithms/blob/master/Daliy_Algorithms/BOJ_1725/BOJ_1725.cpp



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
// 백준알고리즘 1725번 :: 히스토그램
#include<iostream>
#include<stack>
using namespace std;
#define max(a,b) a > b ? a : b
stack<int> st;
int arr[1000002];
int N = 0;
int ret = 0;
 
int main(void)
{
    cin >> N;
 
    for (int i = 1; i <= N; i++)
        cin >> arr[i];
 
    st.push(0);
    for (int i = 1; i <= N+1; i++)
    {
        while (!st.empty() && arr[st.top()] > arr[i])
        {
            int height = arr[st.top()];
            st.pop();
            int width = i - st.top()-1;
 
            ret = max(ret, height*width);
        }
        st.push(i);
    }
 
    cout << ret;
 
    return 0;
}
cs


'Problem > ETC' 카테고리의 다른 글

[SW Expert Academy] 1213. String  (0) 2019.03.05
[C/C++] BOJ 2163 :: 초콜릿 자르기  (0) 2019.02.21
[C/C++] BOJ 2529 :: 부등호  (0) 2019.01.12
[C/C++] BOJ 12101 :: 1, 2, 3 더하기 2  (0) 2019.01.12
[C/C++] BOJ 2210 :: 숫자판 점프  (0) 2019.01.12