본문 바로가기
Algorithm

(BOJ) 1406 풀이

by snwo 2022. 1. 25.
#include<bits/stdc++.h>
using namespace std;
int main(void){
    list<char> l;
    list<char>::iterator it;
    string s;
    char arg;
    int N;
    cin >> s;
    for(auto i:s){
        l.push_back(i);
    }
    it=l.end();
    cin >> N;
    for(int i=0;i<N;i++){
        cin >> s;
        if(s=="L"){
            if(it!=l.begin())it--;
        }else if(s=="D"){
            if(it!=l.end())it++;
        }else if(s=="B"){
            if(it!=l.begin()){
                it--;
                it=l.erase(it);
            }
        }else if(s=="P"){
            cin >> arg;
            l.insert(it,arg);
        }
    }
    for(auto c:l)cout << c;
}

STL list 자료구조를 이용하는 문제였다.

L → iterator 을 왼쪽으로 이동.

D → iterator 을 오른쪽으로 이동.

B → iterator 을 감소시켜서 왼쪽 문자로 이동한 다음

그 문자를 erase 함. 그럼 리턴값으로 그 다음값의 iterator 을 반환받을 수 있는데

그걸 iterator 변수에 넣으면 됨

P → 문자 하나를 추가로 입력받아서 앞에 원소 추가. iterator 은 바뀌지 않으니까 따로 증감 필요없음