- sol1: stack 2개를 이용한 포인터 처리
포인터의 왼쪽과 오른쪽에 위치하는 문자를 저장하는 두 스택(stack list & right)을 이용해 풀이
- L, D, B, P에 대한 처리
- 스택 left의 모든 원소를 스택 right로 이동
- right의 모든 원소 출력
#include <iostream>
#include <string>
#include <stack>
using namespace std;
int main()
{
int M;
string s = "";
stack<char> left;
stack<char> right;
cin >> s;
for (int i = 0; i < (int)s.size(); i++)
left.push(s[i]);
cin >> M;
for (int i = 0; i < M; i++)
{
char cmd, c;
cin >> cmd;
if (cmd == 'L')
{
if (!left.empty())
{
right.push(left.top());
left.pop();
}
}
else if (cmd == 'D')
{
if (!right.empty())
{
left.push(right.top());
right.pop();
}
}
else if (cmd == 'B')
{
if (!left.empty())
left.pop();
}
else if (cmd == 'P')
{
cin >> c;
left.push(c);
}
}
while (!left.empty())
{
right.push(left.top());
left.pop();
}
while (!right.empty())
{
cout << right.top();
right.pop();
}
}
#include <iostream>
#include <string>
#include <list>
using namespace std;
int main()
{
int M;
string s = "";
string ans = "";
cin >> s;
list<char> li(s.begin(), s.end());
auto cursor = li.end();
cin >> M;
for (int i = 0; i < M; i++)
{
char cmd, c;
cin >> cmd;
if (cmd == 'L') if (cursor != li.begin()) cursor--;
else if (cmd == 'D') if (cursor != li.end()) cursor++;
else if (cmd == 'B')
{
if (cursor != li.begin())
{
cursor--;
cursor = li.erase(cursor);
}
}
else if (cmd == 'P')
{
cin >> c;
li.insert(cursor, c);
}
}
for (cursor = li.begin(); cursor != li.end(); cursor++)
cout << *cursor;
}