STL list로 문제를 풀었다.
1) '<' 일때는 커서가 맨 앞이 아닌 경우에 왼쪽으로 한칸 이동
2) '>' 일때는 커서가 맨 뒤가 아닌 경우에 오른쪽으로 한칸 이동
3) '-' 일때는 커서가 맨 앞이 아닌 경우에 커서 왼쪽에 있는 글자를 지움. 커서가 가르키는 글자를 지우는게 아니므로 커서를 왼쪽으로 한칸 보내고 글자를 지움
#include <bits/stdc++.h>
using namespace std;
int main()
{
int n;
scanf("%d", &n);
while(n--)
{
string str;
cin >> str;
list<char> L;
list<char>::iterator t = L.end();
for(auto e:str)
{
if (e == '<')
{
if (t != L.begin())
t--;
}
else if (e == '>')
{
if (t != L.end())
t++;
}
else if (e == '-')
{
if (t != L.begin())
{
t--;
t = L.erase(t);
}
}
else
L.insert(t, e);
}
for (auto e:L)
cout << e;
cout << '\n';
L.clear();
}
}
STL, string, auto는 c++의 기능이므로 c스타일의 문법으로 접근해서는 안된다.
실행속도를 위해 cin/cout 대신에 scanf/printf를 쓰다보니 이 문제를 자주 보게 된다.
앞으로 더 조심하도록 하자