백준 #17298 오큰수
수열에서 어떤 수보다 오른쪽에 있으면서 큰 수 중 가장 왼쪽에 있는 수를 출력하는 문제.
스택을 사용해서 풀 수 있다.
vector
예시)
#include <iostream>
#include <bits/stdc++.h>
#include <vector>
#include <stack>
using namespace std;
int N;
int main() {
ios_base::sync_with_stdio(false);
cin.tie(NULL);
stack<int> stk;
cin >> N;
vector<int> ans(N, -1);
vector<int> v;
for(int i = 0; i < N; i++) {
int dummy;
cin >> dummy;
v.push_back(dummy);
}
for(int i = 0; i < N; i++) {
while(!stk.empty() && v[stk.top()] < v[i]) {
ans[stk.top()] = v[i];
stk.pop();
}
stk.push(i);
}
for(auto it = ans.begin(); it != ans.end(); it++) {
cout << *it << " ";
}
return 0;
}
Comments