알고리즘/BOJ(C++)

[BOJ]1406 :: 에디터

쿠마쿠마34 2018. 6. 16. 20:01
반응형

https://www.acmicpc.net/problem/1406


자료구조 연습하기 좋은문제!!


문제 설명은 생략하고 


커서를 기준으로 왼쪽 문자열을 저장하고 오른쪽 문자열을 저장하는게 핵심이다!


왼쪽 오른쪽 모두 앞뒤로 push pop이 편리해야 하므로 deque 자료구조를 사용합니다..


L : 왼쪽 deque의 back을 오른쪽 deque의 맨 앞으로 (empty일 경우 예외처리)

D : 오른쪽 deque의 front을 왼쪽 deque의 맨 뒤로 (empty일 경우 예외처리)

B : 왼족 deque의 back을 삭제하기(pop_back())

P : 왼쪽 deque의 back에 추가!


#include <iostream>
#include <queue>
#include <string>
using namespace std;
deque<char> l;//커서 왼쪽 문자들을 보관
deque<char> r;//커서 오른쪽 문자들 보관
int main()
{
std::ios::sync_with_stdio(false);
cin.tie(NULL);
string initial;
cin >> initial;
int len = initial.length();
for (int i = 0; i < len; i++)
{
l.push_back(initial[i]);
}//처음 입력받은 문자들 모두 왼쪽에 넣기
int n;//명령어 개수
cin >> n;
while (n--)
{
char cmd;
cin >> cmd;
if (cmd == 'L')
{
if (!l.empty())
{
char temp = l.back();
l.pop_back();
r.push_front(temp);
}
}
else if (cmd == 'D')
{
if (!r.empty())
{
char temp = r.front();
r.pop_front();
l.push_back(temp);
}
}
else if (cmd == 'B')
{
if (!l.empty())
{
l.pop_back();
}
}
else if (cmd == 'P')
{
char input;
cin >> input;
l.push_back(input);
}
}
while (!l.empty())
{
cout << l.front();
l.pop_front();
}
while (!r.empty())
{
cout << r.front();
r.pop_front();
}
}


반응형