문제 풀이/기타

[백준] 5430 (AC)

interfacer_han 2024. 3. 7. 15:51

#1 알고리즘

배열을 실제로 뒤집거나, 원소를 삭제하는 연산은 높은 처리 시간을 요구한다. 따라서 배열을 실제로 뒤집는 대신 reversed = !reversed 연산으로 대체한다. 그리고 원소를 삭제하는 대신 reversed == false라면 startIndex++, reversed == true라면 endIndex--를 수행한다.

 

#2 코드 - 코틀린

lateinit var p: Array<Char>
var n: Int = -1
lateinit var array: Array<Int>

fun main() {
    val t = readln().toInt()

    for (i: Int in 0..<t) {
        p = readCharArray()
        n = readln().toInt()
        array = readIntArray()

        println(solve())
    }
}

fun solve(): String {
    var startIndex = 0
    var endIndex = n - 1
    var reversed = false

    for (i: Int in p.indices) {
        if (p[i] == 'R') {
            reversed = !reversed
        } else { // p[i] == 'D'
            if (endIndex < startIndex) { // 배열이 비어있는데 D를 사용한 경우
                return "error"
            } else {
                if (!reversed) {
                    startIndex++
                } else {
                    endIndex--
                }
            }
        }
    }

    return makeSubString(startIndex, endIndex, reversed)
}

fun readCharArray(): Array<Char> {
    val inputted = readln()
    val submit: Array<Char> = Array(inputted.length) { ' ' }
    for (i: Int in inputted.indices) {
        submit[i] = inputted[i]
    }

    return submit
}

fun readIntArray(): Array<Int> {
    val inputted = readln()

    if (inputted == "[]") {
        return Array(0) { 0 }
    }

    val sliced = inputted.substring(1, inputted.length - 1).split(",")
    val submit: Array<Int> = Array(sliced.size) { 0 }
    for (i: Int in sliced.indices) {
        submit[i] = sliced[i].toInt()
    }

    return submit
}

fun makeSubString(startIndex: Int, endIndex: Int, reversed: Boolean): String {
    val submit = StringBuilder()
    if (!reversed) { // reserved == false
        for (i: Int in startIndex..endIndex) {
            submit.append("${array[i]},")
        }
    } else { // reserved == true
        for (i: Int in endIndex downTo startIndex) {
            submit.append("${array[i]},")
        }
    }

    return if (submit.isEmpty()) {
        "[]"
    } else {
        "[${submit.substring(0, submit.length - 1)}]"
    }
}

'문제 풀이 > 기타' 카테고리의 다른 글

[백준] 30804 (과일 탕후루)  (0) 2024.06.20
[백준] 1764 (듣보잡)  (0) 2024.06.10
[백준] 2630 (색종이 만들기)  (0) 2024.03.04
[백준] 21736 (헌내기는 친구가 필요해)  (0) 2024.03.02
[백준] 1074 (Z)  (0) 2024.03.01