Up

BOJ 5397:: 키로거

문자열과 커서가 나오는 문제는 이것 말고도 다양합니다. 풀이도 비슷하고요.

두 스택 frontrear를 준비합니다. front 커서 앞에 있는 문자들을 저장하고 rear는 커서 뒤에 있는 문자들을 저장합니다. 둘 다 처음엔 비어있습니다.

물론 스택이 비어 pop 불가능하면 해당 명령을 무시합니다.

#include<cstdio>
#include<stack>

using namespace std;

char l[1000001];

int main(void) {
    int t;
    scanf("%d", &t);

    while (t--) {
        scanf("%s", l);
        stack<char> front, rear;
        for (int i = 0; l[i] != 0; i++) {
            if (l[i] == '<') {
                if (!front.empty()) {
                    rear.push(front.top());
                    front.pop();
                }
            }
            else if (l[i] == '>') {
                if(!rear.empty()) {
                    front.push(rear.top());
                    rear.pop();
                }
            }
            else if (l[i] == '-') {
                if (!front.empty())
                    front.pop();
            }
            else
                front.push(l[i]);
        }
        while (!front.empty()) {
            rear.push(front.top());
            front.pop();
        }
        while (!rear.empty()) {
            printf("%c", rear.top());
            rear.pop();
        }
        printf("\n");
    }

    return 0;
}