백준 5397번 키로커 Kotlin

: ) YOUNG·2025년 2월 13일
1

알고리즘

목록 보기
452/458
post-thumbnail

백준 5397번 키로커 Kotlin

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

문제



생각하기


  • 연결 리스트


동작

listIterator를 사용하여 커서를 이동시켜 입력과 삭제를 효율적으로 관리했다.


    val list: MutableList<Char> = LinkedList()
    val iter = list.listIterator()

처음에 ArrayDeque으로 listIterator()를 만들었는데,
ArrayDequelistIteratorLinkedListlistIterator에 차이가 있다는 걸 파악해 수정했다.





결과


코드


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

0개의 댓글

관련 채용 정보