-
백준 1406 - 에디터백준 algorithm 2020. 2. 25. 21:56반응형
stack을 사용하여 풀 수 있는 문제이다.
stack 두 개를 사용하여 커서를 표현 할 수 있다.
커서는 언제나 leftStack과 rightStack 사이에 있다.L : leftStack.top을 rightStack으로 옮긴다.
D: rightStack.top을 leftStack으로 옮긴다.
B: leftStack.top을 삭제한다.P : leftStack에 해당하는 char를 추가한다.
Print () : rightStack은 pop하는 순서대로 뽑아도 무방하다. 하지만 leftStack은 pop하는 반대 순서로 print해야 한다. 본인은 vector를 사용하여 간단하게 활용하였다. leftStack을 deque 를 사용하였다면 더 간단히 해결할 수 있을 듯 하다.
#include <iostream> #include <stack> #include <string> #include <vector> using namespace std; stack<char> leftStack, rightStack; void Lcursor() { if(leftStack.empty())return; else{ rightStack.push(leftStack.top()); leftStack.pop(); } } void Dcursor() { if(rightStack.empty())return; else{ leftStack.push(rightStack.top()); rightStack.pop(); } } void Delete() { if(leftStack.empty())return; else{ leftStack.pop(); } } void Add() { char addChar; cin >> addChar; leftStack.push(addChar); } void Print() { vector<char> leftStackVector; while(!leftStack.empty()) { leftStackVector.push_back(leftStack.top()); leftStack.pop(); } for(int i=leftStackVector.size()-1; i>=0; --i) { cout<<leftStackVector[i]; } while(!rightStack.empty()) { cout<<rightStack.top(); rightStack.pop(); } cout<<'\n'; } int main() { ios_base::sync_with_stdio(false); cin.tie(nullptr); cout.tie(nullptr); string first; cin>>first; int N; cin>> N; for(int i=0; i<first.length(); ++i)//pushing elements into leftStack { char c= first[i]; leftStack.push(c); } for(int j=0; j<N; ++j) { char c; cin>> c; if(c=='L')Lcursor(); else if(c=='D')Dcursor(); else if(c=='B')Delete(); else { Add(); } } Print(); //print all elements of stacks return 0; }
반응형'백준 algorithm' 카테고리의 다른 글
백준 - 17413 단어 뒤집기 2 (0) 2020.03.02 백준 1158 - 요세푸스 문제 (0) 2020.02.26 백준 1874 - 스택 수열 (0) 2020.02.21 백준 9012 - 괄호 (0) 2020.02.21 백준 9093 - 단어 뒤집기 (0) 2020.02.20