BOJ 길라잡이

[C/C++ 백준 1406번] 에디터 (Silver 3)

새파란 공대생 2020. 10. 7. 09:54

www.acmicpc.net/problem/1406

 

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();
	}
}