https://www.acmicpc.net/problem/6198
6198번: 옥상 정원 꾸미기
문제 도시에는 N개의 빌딩이 있다. 빌딩 관리인들은 매우 성실 하기 때문에, 다른 빌딩의 옥상 정원을 벤치마킹 하고 싶어한다. i번째 빌딩의 키가 hi이고, 모든 빌딩은 일렬로 서 있고 오른쪽으
www.acmicpc.net
monotone stack이란?
-> 스택 내부를 오름차순 또는 내림차순으로 유지 해주는 알고리즘
https://justicehui.github.io/medium-algorithm/2019/01/01/monotoneStack/
monotone stack
monotone stack은 몇몇 문제들의 시간 복잡도를 O(n)정도로 줄어주는 강력한 테크닉입니다.
justicehui.github.io
풀이
1. 총합을 구하는 것이기 때문에 한 건물 한건물을 추가할때마다 stack 에 자기보다 큰놈들만 냅두기
-> 여기서 monotone stack 사용
2. 자기보다 큰놈들 = 자기를 바라볼 수 있는 애들
-> 매번 남은 stack의 사이즈를 정답에 더해주면 된다.
#include <iostream>
#include <stack>
#include <vector>
using namespace std;
long long answer = 0;
int input;
stack<int> s;
int main()
{
ios_base::sync_with_stdio(0);
cin.tie(0);
int n;
cin >> n;
for (int i = 0; i < n; i++)
{
cin >> input;
while (!s.empty())
{
if (s.top() > input)
break;
s.pop();
}
answer += (long long)s.size();
s.push(input);
}
cout << answer << endl;
return 0;
}
'c++ > Baekjoon Online' 카테고리의 다른 글
백준 1765 : 닭싸움 팀 정하기 C++ (0) | 2021.09.12 |
---|---|
백준 11967 : 불켜기 C++ (0) | 2021.09.12 |
백준 2258 : 정육점 c++ (0) | 2021.07.01 |
백준 1461 : 도서관 C++ (0) | 2021.06.27 |
백준 8980 : 택배 C++ (0) | 2021.06.27 |