BOJ 길라잡이
[C/C++ 백준 1406번] 에디터 (Silver 3)
새파란 공대생
2020. 10. 7. 09:54
1406번: 에디터
첫째 줄에는 초기에 편집기에 입력되어 있는 문자열이 주어진다. 이 문자열은 길이가 N이고, 영어 소문자로만 이루어져 있으며, 길이는 100,000을 넘지 않는다. 둘째 줄에는 입력할 명령어의 개수�
www.acmicpc.net
스택 두개를 활용하는 문제이다. 커서를 기준으로 서로 바라보는 2개의 스택이 있다고 가정하자. 이때, 각 행동은 다음과 일치하게 된다.
L : 왼쪽의 스택에서 하나의 문자를 빼서 오른쪽의 스택에 넣는다.
D : 오른쪽의 스택에서 하나의 문자를 빼서 왼쪽의 스택에 넣는다.
B : 왼쪽의 스택에서 문자 하나를 뺀다.
P & : 왼쪽의 스택에 &라는 문자를 넣는다.
#include <cstdio>
#include <stack>
using namespace std;
int main(void){
stack <char> bc;
stack <char> ac;
char x;
int M;
while(1){
scanf("%1c", &x);
if(x=='\n' || x==' '){
break;
}
else{
bc.push(x);
}
}
scanf("%d", &M);
for(int i=0; i<M; i++){
scanf(" %c", &x);
if(x=='P'){
char tmp;
scanf(" %c", &tmp);
bc.push(tmp);
}
if(x=='L'){
if(bc.size()){
char tmp = bc.top();
bc.pop();
ac.push(tmp);
}
}
if(x=='D'){
if(ac.size()){
char tmp = ac.top();
ac.pop();
bc.push(tmp);
}
}
if(x=='B'){
if(bc.size())
bc.pop();
}
}
int t1 = bc.size();
char string1[t1];
for(int i=t1-1; i>=0; i--){
string1[i] = bc.top();
bc.pop();
}
for(int i=0; i<t1; i++)
printf("%c",string1[i]);
while(ac.size()){
printf("%c",ac.top());
ac.pop();
}
}