문제링크: https://www.acmicpc.net/problem/17299
문제는 다음과 같습니다.
전에 풀었던 오큰수와 거의 비슷하고 살짝 응용된 정도라고 볼 수 있습니다.
스택에 저장해야하는 값이 다를 뿐, 원리는 같은 문제라고 생각합니다!
먼저 제 코드는 다음과 같습니다.
#include <iostream>
#include <stack>
#include <vector>
#include <algorithm>
using namespace std;
int main(){
ios_base::sync_with_stdio(false);
cin.tie(nullptr);
int n, tmp;
stack<int> s;
vector<int> v, res; // res: 결과벡터
int f[1000001]={0, };
cin>>n;
for(int i=0; i<n; i++){
cin>>tmp;
v.push_back(tmp);
f[tmp]++;
}
reverse(v.begin(), v.end());
for(int i=0; i<v.size(); i++){
if(s.empty()){
res.push_back(-1);
}
else{
// !s.empty()인 경우
while(!s.empty() && f[v[i]]>=f[s.top()]){
s.pop();
}
if(s.empty()) res.push_back(-1);
else res.push_back(s.top());
}
s.push(v[i]);
}
reverse(res.begin(), res.end());
for(int i=0; i<res.size(); i++) cout<<res[i]<<" ";
cout<<endl;
return 0;
}
다른 사람들의 풀이도 좀 살펴봤는데요,
거의 다 비슷하더라구요, 그래서 이문제도 그냥 넘어가겠습니다!