https://www.acmicpc.net/problem/5397
두 개의 Stack(key, delete)을 사용하여 풀이하였다. 이유는 두가지이다.
'-' : keyStack에 가장 최근에 들어간 문자열을 삭제해줘야함. (LIFO)
'<' or '>' : 커서 위치 변경은 삽입 순서가 바뀌는 것이다.
'<'을 할 때 left에 가장 최근에 들어간 문자열을 right에 저장해준다.
'>'을 할 때는 right 있는 문자열을 꺼내준다음 left에 넣어준다.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Stack;
public class Main {
static int T;
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
T = Integer.parseInt(br.readLine());
for (int t = 0; t < T; t++) {
String str = br.readLine();
Stack<Character> left = new Stack<>();
Stack<Character> right = new Stack<>();
for (int i = 0; i < str.length(); i++) {
char c = str.charAt(i);
switch (c) {
case '<':
if (!left.isEmpty()) {
right.push(left.pop());
}
break;
case '>':
if (!right.isEmpty()) {
left.push(right.pop());
}
break;
case '-':
if (!left.isEmpty()) {
left.pop();
}
break;
default:
left.push(c);
break;
}
}
StringBuilder sb = new StringBuilder();
while (!left.isEmpty()) {
right.push(left.pop());
}
while (!right.isEmpty()) {
sb.append(right.pop());
}
System.out.println(sb);
}
}
}