문자열과 커서가 나오는 문제는 이것 말고도 다양합니다. 풀이도 비슷하고요.
두 스택 front
와 rear
를
준비합니다. front
커서 앞에 있는 문자들을
저장하고 rear
는 커서 뒤에 있는 문자들을
저장합니다. 둘 다 처음엔 비어있습니다.
- 왼쪽 화살표:
front
에서 pop하고 그걸rear
에 push합니다. - 왼쪽 화살표:
rear
에서 pop하고 그걸front
에 push합니다. - 백스페이스:
front
에서 pop합니다. - 문자 입력:
front
에 push합니다.
물론 스택이 비어 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;
}