일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 재테크/투자
- 감상문
- Database
- 데이터베이스
- 법의학
- network
- 문제풀이
- SW Expert Academy
- algorithm
- 독서
- D2
- algogritim
- language
- data structure
- cs
- 프로그래머스
- 백준
- 알고리즘
- Computer Science
- LeetCode
- BOJ
- swea
- OS
- 운영체제
- 네트워크
- db
- 자료구조
- D3
- Programmers
- c++
Archives
- Today
- Total
선택은 나의 것
[BOJ 백준] 1725번 히스토그램 본문
문제
BOJ 1725 : https://www.acmicpc.net/problem/1725
1725번: 히스토그램
첫 행에는 N (1 ≤ N ≤ 100,000) 이 주어진다. N은 히스토그램의 가로 칸의 수이다. 다음 N 행에 걸쳐 각 칸의 높이가 왼쪽에서부터 차례대로 주어진다. 각 칸의 높이는 1,000,000,000보다 작거나 같은
www.acmicpc.net
접근
백준 님의 문제 풀이 설명글에서 힌트를 얻어 문제를 해결하였다. 분할 정복을 이용하는 방법과 스택을 이용하여 문제를 해결하는 방법이 상세하게 설명되어있다.
코드
#include<algorithm>
#include<iostream>
#include<stack>
using namespace std;
int n, ans = 0, top, arr[100005];
stack<int> s;
int main() {
cin >> n;
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;
}
'☽ Algorithm > BOJ' 카테고리의 다른 글
[BOJ 백준] 1701번 Cubeditor (0) | 2021.07.15 |
---|---|
[BOJ 백준] 6549번 히스토그램에서 가장 큰 직사각 (0) | 2021.07.14 |
[BOJ 백준] 12764번 싸지방에 간 준하 (0) | 2021.07.12 |
[BOJ 백준] 17609번 회문 (0) | 2021.07.07 |
[BOJ 백준] 5582번 공통 부분 문자열 (0) | 2021.07.06 |
Comments