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()