https://www.acmicpc.net/problem/1406
제목 : 에디터
난이도 : Silver II

편집기의 명령어는 다음과 같다.
처음에는 단순 문자열로 커서 위치를 flg로 주고 연산을 시도 했는데 시간초과가 났다.
그래서 생각해낸 결과 스택을 활용하면 될 것 같다고 생각했다.
커서를 왼쪽으로 옮기는것은 뒤에 있는 문자열을 임시 스택으로 빼서 보관을 하는 식이고,
커서를 오른쪽으로 옮기는 것은 임시 스택에서 기존 스택으로 집어넣는 것이다.
지우는 것은 스택에서 빼버리는 것이고,
문자를 집어넣는 것은 기존 스택에 집어넣는 것이다.
처음에 받아오는 문자열을 차례대로 스택에 넣어 준 다음
임시 스택을 생성해서 연산을 수행하면 된다.
저는 출력을 생각해 deque를 메인 저장소로 활용했다.
아니면 임시 스택에 기존 스택에 있는 문자열을 전부 넣은 다음 한꺼번에 출력하는 방법도 있다.
#include <iostream>
#include <stack>
#include <queue>
using namespace std;
int main()
{
string s, order, al;
int M, L = 0;
cin >> s >> M;
deque<string> sen;
stack<string> right;
for (int i = 0; i < s.length(); i++) {
sen.push_back(s.substr(i, 1));
}
for (int i = 0; i < M; i++) {
cin >> order;
if (order == "P") {
cin >> al;
sen.push_back(al);
}
else if (order == "L") {
if (!sen.empty()) {
right.push(sen.back());
sen.pop_back();
}
}
else if (order == "D") {
if (!right.empty()) {
sen.push_back(right.top());
right.pop();
}
}
else if (order == "B") {
if (!sen.empty()) {
sen.pop_back();
}
}
}
while (!sen.empty()) {
cout << sen.front();
sen.pop_front();
}
while (!right.empty()) {
cout << right.top();
right.pop();
}
}
