STL list로 문제를 해결할 수 있다.
list::iterator t으로 커서의 위치를 문자열의 맨 끝으로 받은다음에
P는 입력할 문자를 입력받는 것이므로 insert
L은 커서를 왼쪽으로 한 칸 옮기는 것이므로 t--
D는 커서를 오른쪽으로 한 칸 옮기는 것이므로 t++
B는 커서 왼쪽에 있는 문자를 삭제하는것이므로 t--으로 커서를 한칸 옮긴 다음에 t=L.erase(t) 으로 문자를 삭제하였다.
#include <bits/stdc++.h>
using namespace std;
char str[100000];
int main(void) {
list<char> L;
int n;
scanf("%s", &str);
for(int i=0;str[i]!='\0';++i)
L.push_back(str[i]);
list<char>::iterator t = L.end();
scanf("%d", &n);
for (int i = 0; i < n; ++i)
{
char a, b;
cin >> a;
if (a == 'P')
{
cin >> b;
L.insert(t, b);
}
else if (a == 'L')
{
if (t != L.begin())t--;
}
else if (a == 'D')
{
if (t != L.end())t++;
}
else if (a == 'B')
{
if (t != L.begin())
{
t--;
t = L.erase(t);
}
}
}
for (auto& e : L)
cout << e;
}
STL list를 처음 사용해보았다. 그동안 알고있던 연결리스트는 node를 사용해서 문제를 푸는것이여서 되게 어렵게 느껴졌는데 list를 사용하니 쉽게 문제를 해결할 수 있었던거 같다.