# 본인 풀이(성공)
#include<bits/stdc++.h>
using namespace std;
int n;
stack<int> stk;
map<int, queue<int>> solution;
int a[1000000];
int main(){
ios::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
cin >> n;
// 동일한 수 처리
for (int i = 0; i < n; i++){
int temp;
cin >> temp;
a[i] = temp;
while(stk.size() && stk.top() < temp){
solution[stk.top()].push(temp);
stk.pop();
}
stk.push(temp);
}
while(stk.size()){
int top = stk.top();
stk.pop();
solution[top].push(-1);
}
for (int i = 0; i < n; i++){
cout << solution[a[i]].front() << " ";
solution[a[i]].pop();
}
cout << "\n";
return 0;
}
- 시간초과남
- 스택을 사용하는 로직 자체는 혼자 생각했는데 큐를 써서 그런지 몰라도 시간초과가 왜 발생하는지 도통 모르겠다.
#include<bits/stdc++.h>
using namespace std;
int n;
stack<int> stk;
int ret[1000004];
int a[1000004];
int main(){
ios::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
cin >> n;
// 동일한 수 처리
for (int i = 0; i < n; i++){
int temp;
cin >> temp;
a[i] = temp;
while(stk.size() && a[stk.top()] < temp){
ret[stk.top()] = temp;
stk.pop();
}
stk.push(i);
}
for (int i = 0; i < n; i++){
if(!ret[i]){
cout << -1 << " ";
}else{
cout << ret[i] << " ";
}
}
cout << "\n";
return 0;
}
- 배열 인덱스를 스택에 푸시하여 풀이했음
- 큐나 맵 자료구조를 쓰면 연산에 드는 비용이 추가되어 시간초과가 발생하나보다.. 이론상으로는 괜찮은것같은데