[BOJ] 5397 : 키로거

5397 : 키로거

풀이

중간 삽입,삭제 연산이 많아 리스트로 풀어야 하는문제.

간단한 리스트 구현문제이지만, stl을 써서 풀려니까 손에안익는부분이 많았다.

리스트 다룰때 배운점: [l.insert(cursor,str[i]);를 하면 cursor++를 안해도된다]는점,

그리고 지난번에 겪어본 [리스트는 erase할때 tmp에 iter를 저장해뒀다가 지우고 다시 가져와야한다.]

같이풀면 좋을것같은문제(리스트문제)

1406 : 에디터 리스트 활용

2346 : 풍선터트리기

코드

#include <iostream>
#include <list>
using namespace std;
int main(){
    int T;
    cin>>T;
    while(T--){
        string str;
        cin>>str;
        list<char> l;
        auto cursor = l.end();
        for(int i=0;i<str.size();i++){
            if(str[i]=='<'){
                //커서감소, begin이면 예외처리
                if(cursor!=l.begin()){
                    cursor--;
                }
            }else if(str[i]=='>'){
                //커서증가 end면 예외처리
                if(cursor!=l.end()){
                    cursor++;
                }
            }else if(str[i]=='-'){
                //cursor-1 값 삭제 begin이면 예외처리
                if(cursor != l.begin()){
                    auto tmp = cursor;
                    cursor--;
                    l.erase(cursor);
                    cursor=tmp;
                }
            }else{
                //값 추가
                l.insert(cursor,str[i]);
                //cursor++;
            }
        }
        for(auto it=l.begin();it!=l.end();it++){
            cout<<*it;
        }
        cout<<'\n';
    }
    
    return 0;
}

Written on March 15, 2019