https://www.acmicpc.net/problem/2493
*의사코드 및 전체코드
#include <bits/stdc++.h>
using namespace std;
int n;
stack<pair<int, int>> s; //높이,인덱스
int main() {
ios_base::sync_with_stdio(0);
cin.tie(0); cout.tie(0);
/**
* 1. 맨왼쪽에 {100,000,001 / idx 0} 의 탑이있다고 가정 => 0을 리턴하도록
* 2. 나보다 작은 타워는 쓸모없음 -> 모두 pop
* 3. 내 좌측에는 나보다 큰 타워만남음 -> 그게 정답
* 4. push
*/
cin >> n;
s.push({ 100000001,0 });
for (int i = 1; i <= n; ++i) {
int height;
cin >> height;
while (height > s.top().first) {
s.pop();
}
cout << s.top().second<<" ";
s.push({ height,i });
}
}
'Algorithm > 스택' 카테고리의 다른 글
백준 2504 c++ // 스택응용 (0) | 2023.09.01 |
---|---|
백준 10799 c++ // 스택응용 idea, 남은'('의 갯수를 활용하라 (0) | 2023.08.23 |
백준 4949 cpp // 괄호검사 알고리즘 (0) | 2023.08.22 |
백준 1874 cpp // 유효스택검사 알고리즘 (0) | 2023.08.17 |
백준 10773 cpp // 스택사용법 (0) | 2023.08.17 |