본문 바로가기
Algorithm

(BOJ) 5397 풀이

by snwo 2022. 1. 25.
#include<bits/stdc++.h>
using namespace std;
int main(void){
    list<char> L;
    list<char>::iterator cur;
    int T;
    string s;
    cin >> T;
    while(T--){
        cur=L.begin();
        cin >> s;
        for(auto c:s){
            if(c=='<'){
                if(cur!=L.begin())cur--;
            }else if(c=='>'){
                if(cur!=L.end())cur++;

            }else if(c=='-'){
                if(cur!=L.begin()){
                    cur=L.erase(--cur);
                }
            }else{
                L.insert(cur,c);
            }
        }
        for(auto c:L)
            cout << c ;
        cout << '\\n';
        L.clear();
    }
}

마찬가지로 STL list 연습문제.

< : 시작부분이 아니면 왼쪽으로 커서이동.

> : 마지막부분이 아니면 오른쪽으로 커서이동.

number, alphabet : cur 이 가리키는 곳 이전의 위치에 문자를 삽입한다.

- : insert 메소드는 항상 cur 이전에 문자를 삽입하므로,

erase 메소드를 사용할 때, cur 을 감소시킨 다음 지워야한다.

이 때 cur 이 시작부분을 가리키고 있을 경우, cur 을 감소시키면 런타임에러가 나니까

제외시켜준다.