[백준] 6198번 옥상 정원 꾸미기 (stack, c++)
728x90
반응형
스택에는 현재 인덱스 i를 집어넣는다.
그 전에 스택이 비어있지 않으면 스택의 최상단(위치 prev)과 현재 높이(위치 i)의 차이 -1(자기자신은 빼줌)
개수 만큼의 빌딩을 볼 수 있다는 이야기이다.
n=80000이고 자기 위치 다음 빌딩들이 모두 자기보다 작다하면 80000+ 79999 + 79998 +... 이런 예시가 들어온다
대략 n^2으로 계산하면 6.4*10^9 으로 int 범위가 넘어가므로 ans는 long long 형으로 해준다.
#include <iostream>
#include <vector>
#include <string>
#include <stack>
using namespace std;
int n;
int main(void) {
ios::sync_with_stdio(false);
cin.tie(NULL);
cin >> n;
vector<int> v(n);
long long sum = 0;
stack<int> s;
for (int i = 0; i < n; i++) {
cin >> v[i];
}
for (int i = 0; i < n; i++) {
while (!s.empty() && v[s.top()]<=v[i]) {
int prev = s.top();
s.pop();
sum+= i - prev - 1;
}
s.push(i);
}
while (!s.empty()) {
int prev = s.top();
s.pop();
sum += n - prev - 1;
}
cout << sum;
return 0;
}
728x90
반응형
'백준' 카테고리의 다른 글
[백준] 5430번 AC (C++ , DEQUE) (0) | 2021.10.05 |
---|---|
[백준] 1021번 회전하는 큐 (C++, DEQUE) (0) | 2021.10.05 |
[백준] 5397번 키로거 (리스트, c++) (0) | 2021.09.27 |
[백준] 3273번 두 수의 합 (배열, 포인터 c++) (0) | 2021.09.24 |
[백준] 1919번 애너그램 만들기 (배열, C++) (0) | 2021.09.24 |
TAGS.