처음에는 그냥 vector에 erase,insert로 생각없이 접근했다.
시간초과가 나고 n크기와 o(N^3) 가 된다는걸 알았다.
(erase,insert는 각각 for문 형태인걸 잊지말자)
n이 1,000,000 에 1초제한이므로 2중 for문으로도 안될것 같아서 2개의 스택을 이용해서 다시풀었다.
#include<iostream>
#include<vector>
#include<string>
using namespace std;
vector<string> a;
vector<vector<char>> result;
int N;
vector<char> b;
int main() {
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
result.push_back(b);
int m = 0;
cin >> N;
for (int i = 0; i < N; i++) {
string abc;
cin >> abc;
a.push_back(abc);
}
for (int j = 0; j < N; j++) {
int k=a[j].size();
int cursor = 0;
for (int i = 0; i < k; i++) {
if (a[j][i] == '<') {
if(cursor>0)
cursor--;
}
else if (a[j][i] == '>') {
if (cursor>=result[m].size()) continue;
cursor++;
}
else if (a[j][i] == '-') {
if (cursor == 0) continue;
if (cursor >= result[m].size()) continue;
if (!result[m].empty()) {
result[m].erase(result[m].begin() + (cursor-1));
cursor--;
}
}
else {
result[m].insert(result[m].begin() + cursor, a[j][i]);
cursor++;
}
}
m++;
result.push_back(b);
}
int total = result.size();
for (int i = 0; i < total; i++) {
for (int j = 0; j < result[i].size(); j++)
{
cout << result[i][j];
}
cout << endl;
}
return 0;
}