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

listIterator를 사용하여 커서를 이동시켜 입력과 삭제를 효율적으로 관리했다.
val list: MutableList<Char> = LinkedList()
val iter = list.listIterator()
처음에 ArrayDeque으로 listIterator()를 만들었는데,
ArrayDeque의 listIterator와 LinkedList의 listIterator에 차이가 있다는 걸 파악해 수정했다.

import java.io.File
import java.util.LinkedList
// input
private var br = System.`in`.bufferedReader()
// variables
private var str = ""
fun main() {
val bw = System.out.bufferedWriter()
val T = br.readLine().toInt()
repeat(T) {
input()
bw.write(solve())
}
bw.close()
} // End of main()
private fun solve(): String {
val sb = StringBuilder()
val N = str.length
val list: MutableList<Char> = LinkedList()
val iter = list.listIterator()
for (i in 0 until N) {
val ch = str[i]
if (ch == '<') {
if (iter.hasPrevious()) iter.previous()
} else if (ch == '>') {
if (iter.hasNext()) iter.next()
} else if (ch == '-') {
if (iter.hasPrevious()) {
iter.previous()
iter.remove()
}
} else {
iter.add(ch)
}
}
while (list.isNotEmpty()) {
sb.append(list.removeFirst())
}
sb.append('\n')
return sb.toString()
} // End of solve()
private fun input() {
str = br.readLine()
} // End of input()