[BOJ] 5397 : 키로거
풀이
중간 삽입,삭제 연산이 많아 리스트로 풀어야 하는문제.
간단한 리스트 구현문제이지만, stl을 써서 풀려니까 손에안익는부분이 많았다.
리스트 다룰때 배운점: [l.insert(cursor,str[i]);를 하면 cursor++를 안해도된다]는점,
그리고 지난번에 겪어본 [리스트는 erase할때 tmp에 iter를 저장해뒀다가 지우고 다시 가져와야한다.]
같이풀면 좋을것같은문제(리스트문제)
코드
#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