두 개의 덱을 이용하여 해결할 수 있습니다.
덱을 두 개 사용한 이유는 커서의 위치를 조정해주기 위함입니다.
저는 커서 좌, 우를 나누는 left와 right 덱을 선언하여 커서는 무조건 left를 가리키게 유지하였습니다.
우선 입력으로 '<', '>', '-' 그리고 나머지 문자가 주어집니다.
<이 주어지면 left에서 가장 뒤에있는 문자를 right 앞으로 push합니다. (left가 비어있으면 패스)
>이 주어지면 right에서 가장 앞에있는 문자를 left 뒤로 push합니다. (right가 비어있으면 패스)
-이 주어지면 left에서 가장 뒤에있는 문자를 pop합니다. (left가 비어있으면 패스)
나머지 문자가 주어지면 커서를 left로 유지해야하기 때문에 left 뒤로 push합니다.
이 과정이 끝나면 right에 있는 문자들을 앞에서부터 순서대로 left의 뒤로 차례대로 push하여 출력합니다.
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
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
|
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.ArrayDeque;
import java.util.Deque;
import java.util.StringTokenizer;
public class Main {
static BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
static StringTokenizer st;
static StringBuffer sb = new StringBuffer();
static Deque<Character> left, right;
static char ch[];
static void print() {
while(!left.isEmpty()) {
sb.append(left.peekFirst());
left.removeFirst();
}
sb.append("\n");
}
static void func() {
for (int i = 0; i < ch.length; i++) {
if (ch[i] == '<') {
if (left.isEmpty())
continue;
right.addFirst(left.peekLast());
left.removeLast();
} else if (ch[i] == '>') {
if (right.isEmpty())
continue;
left.addLast(right.peekFirst());
right.removeFirst();
} else if (ch[i] == '-') {
if (left.isEmpty())
continue;
left.removeLast();
} else
left.addLast(ch[i]);
}
while(!right.isEmpty()) {
left.addLast(right.peekFirst());
right.removeFirst();
}
}
static void input() throws Exception {
left = new ArrayDeque<>();
right = new ArrayDeque<>();
st = new StringTokenizer(br.readLine());
ch = st.nextToken().toCharArray();
}
public static void main(String[] args) throws Exception {
st = new StringTokenizer(br.readLine());
int tc = Integer.parseInt(st.nextToken());
while (tc-- > 0) {
input();
func();
print();
}
System.out.println(sb.toString());
}
}
|
cs |
'algorithm > data-structure' 카테고리의 다른 글
boj 3190 뱀 (0) | 2021.02.02 |
---|---|
boj 2346 풍선 터뜨리기 (0) | 2021.02.02 |
boj 10866 덱 (0) | 2021.02.02 |
boj 11000 강의실 배정 (0) | 2021.02.01 |
boj 1966 프린터 큐 (0) | 2021.02.01 |