백준 algorithm

백준 1406 - 에디터

cosmohoo 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;
}

반응형