Algorithm/BOJ
[c++][BOJ][1406] 에디터
kim-hasa
2021. 11. 15. 16:09
https://www.acmicpc.net/problem/1406
1406번: 에디터
첫째 줄에는 초기에 편집기에 입력되어 있는 문자열이 주어진다. 이 문자열은 길이가 N이고, 영어 소문자로만 이루어져 있으며, 길이는 100,000을 넘지 않는다. 둘째 줄에는 입력할 명령어의 개수
www.acmicpc.net
커서의 위치에 따라서 문자를 추가하고 삭제하는 문제입니다.
커서의 좌측과 우측을 각각 스택으로 만들어서 저장합니다.
1. 커서를 왼쪽으로 이동한 경우 => 좌측 스택의 최상단을 우측 스택으로 이동시킵니다.
2. 커서를 오른쪽으로 이동한 경우 => 우측 스택의 최상단을 좌측 스택으로 이동시킵니다.
3. 삭제한 경우 => 좌측 스택의 최상단을 제거합니다.
4. 추가한 경우 => 좌측 스택의 최상단을 추가합니다.
마지막에 좌측 스택을 우측으로 모두 이동시킨 후 출력합니다.
커서 기준으로 좌우를 저장하는 방법을 생각하면 쉽게 풀리는 문제입니다.
#include <iostream>
#include <string>
#include <stack>
using namespace std;
int main() {
string str;
cin >> str;
int n;
cin >> n;
stack<char> left;
stack<char> right;
for(int i=0; i<str.length(); i++)
{
left.push(str[i]);
}
for(int j=0; j<n; j++)
{
char c;
cin >> c;
if(c == 'L')
{
if(!left.empty())
{
char l = left.top();
right.push(l);
left.pop();
}
}
else if(c == 'D')
{
if(!right.empty())
{
char r = right.top();
left.push(r);
right.pop();
}
}
else if(c == 'B')
{
if(!left.empty())
{
left.pop();
}
}
else if(c == 'P')
{
char s;
cin >> s;
left.push(s); // 커서 왼쪽에 추가
}
}
while(!left.empty())
{
char lt = left.top();
right.push(lt);
left.pop();
}
while(!right.empty())
{
char rt = right.top();
cout << rt;
right.pop();
}
}