작성
·
264
0
안녕하세요.
해당 문제를 vector로 풀려고 하는데 계속 시간 초과가 발생해서 질문을 드립니다.
혹시 어느 부분에서 시간초과가 발생하는지 알 수 있을까요?
vector자체가 시간이 조금 많이 걸리는 걸까요?
#include<bits/stdc++.h>
using namespace std;
int T, n, num;
string p, l;
vector<int> v;
bool rev, error;
int main(){
ios_base::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
cin >> T;
while(T--){
rev = false;
error = false;
cin >> p >> n >> l;
for(char c : l){
if(c >= '0' && c <= '9'){
num = num * 10 + (c - '0');
}
if((c == ',' || c == ']') && num > 0){
v.push_back(num);
num = 0;
}
}
for(char c : p){
if(c == 'R')
rev = !rev;
else{
if(v.size()){
if(rev)
v.pop_back();
else
v.erase(v.begin());
}
else{
error = 1;
}
}
}
if(error){
cout << "error\n";
}
else{
if(rev)
reverse(v.begin(), v.end());
cout << "[";
for(int i = 0; i < v.size(); i++){
cout << v[i];
if(i < v.size() - 1)
cout << ",";
}
cout << "]\n";
}
v.clear();
}
}
답변 1
0
안녕하세요. ㅎㅎ
vector를 사용해서라기보다는
vetor의 erase때문에 그렇습니다. erase의 시간복잡도는 최악의 경우 O(N)의 시간복잡도를 가집니다. begin부터 해서 O(1)인 것 같지만 최악의 시간복잡도가 그러합니다.
그렇기 때문에 deque를 써야 하는 것이죠. deque의 pop_front()는 무조건 O(1)의 시간복잡도거든요.
감사합니다.