페이지

5397번: 키로거

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


$O(tl)$

링크드 리스트를 이용한다.


#include<cstdio>
#include<list>
using namespace std;
int t;
char s[1000001];
int main() {
    for (scanf("%d", &t); t--;) {
        list<char> l;
        auto p = l.begin();
        scanf("%s", s);
        for (int i = 0; s[i]; i++) {
            if (s[i] == '-') { if (p != l.begin()) p = l.erase(--p); }
            else if (s[i] == '<') { if (p != l.begin()) p--; }
            else if (s[i] == '>') { if (p != l.end()) p++; }
            else p = l.insert(p, s[i]), p++;
        }
        for (char c : l) putchar(c);
        puts("");
    }
    return 0;
}

댓글 없음 :

댓글 쓰기