티스토리 뷰

반응형

https://www.acmicpc.net/problem/5397

 

5397번: 키로거

첫째 줄에 테스트 케이스의 개수가 주어진다. 각 테스트 케이스는 한줄로 이루어져 있고, 강산이가 입력한 순서대로 길이가 L인 문자열이 주어진다. (1 ≤ L의 길이 ≤ 1,000,000) 강산이가 백스페이

www.acmicpc.net

 

 

  • 문제 해결 방법

스택2개 또는 리스트를 이용하여 해결 할 수 있는 문제입니다.

리스트를 이용하여 원소를 삽입, 삭제하는것 보다 스택2개를 이용하여 해결하는 것이 더 빠른 방법이지만

리스트를 활용해 봤습니다.

리스트의 erase를 사용할때 반복자가 가리키는 원소가 없어지기 때문에 반복자가 참조할 위치를 변경해 주어야 합니다.

 

 

 

  • C++ 전체 코드
#include<bits/stdc++.h>
using namespace std; 
 
 int N; 
 
int main(){
    ios_base::sync_with_stdio(0);
    cin.tie(0);
    cin>>N;
    while(N--) {
        string str;
        cin>>str;
        list<char> lt;
        auto cursor = lt.begin();
 
        for(int i=0; i<str.size(); i++) {
            char ch = str[i];
            if(ch == '-'){
                if (cursor != lt.begin())  lt.erase((--cursor)++);
            } else if(ch == '<'){
                if (cursor != lt.begin()) cursor--;
            } else if(ch == '>'){
                if (cursor != lt.end()) cursor++;
            } else {
                lt.insert(cursor, ch);
            }
        }

        for (auto ch : lt) cout<<ch;
        cout<<'\n';
    }
}

 

반응형
댓글
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/02   »
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28
글 보관함