CodingTest

(백준/Kotlin) 5430번 : AC

Kua 2021. 11. 29. 11:14

난이도: Gold 5

프로그래밍 언어: Kotlin

문제명: AC

푼일자: 2021년 11월

 

주소: https://www.acmicpc.net/problem/5430

 

문제풀기

문제 자체에는 크게 어려운 내용이 없어서 코드로 바로 작성해 보았습니다.

 

import java.util.*
import kotlin.collections.ArrayDeque

fun main() = with(System.`in`.bufferedReader()) { // AC
    val dq = ArrayDeque<Int>()
    val sb = StringBuilder()
    var st: StringTokenizer
    val T = readLine().toInt()

    repeat(T) { _ ->
        run block@{
            val p = readLine().toCharArray()
            val n = readLine().toInt()
            var r = false
            st = StringTokenizer(readLine(), "[],")
            repeat(n) { dq.add(st.nextToken().toInt()) }
            repeat(p.size) { i -> when (p[i]) {
                    'R' -> r = !r else -> {
                        if (dq.isEmpty()) { sb.appendLine("error"); return@block }
                        else if (r) dq.removeLast()
                        else dq.removeFirst()
                    }
                }
            }
            
            sb.append("[").append(if (r) dq.removeLast() else dq.removeFirst())
            repeat(dq.size) { sb.append(",").append(if (r) dq.removeLast() else dq.removeFirst()) }
            sb.appendLine("]")
        }
    }
    print(sb)
}

 

이렇게 작성하였고, 테스트 케이스가 잘 수행되자 제출을 해보았지만

 

런타임 에러가 발생하였습니다. NoSuchElement ? removeLast 혹은 removeFirst 에서 나타날 수 있는 에러임은 짐작했었고, 질문 검색을 보니 저와 동일하게 50% 에서 문제가 생긴 사람들이 무수히 많았습니다.

 

그중 https://www.acmicpc.net/board/view/76494 이 글에서 설명하는 내용을 보고 아래와 같이 보완하여 문제를 맞추었습니다. 

 

import java.util.*
import kotlin.collections.ArrayDeque

fun main() = with(System.`in`.bufferedReader()) { // AC
    val dq = ArrayDeque<Int>()
    val sb = StringBuilder()
    var st: StringTokenizer
    val T = readLine().toInt()

    repeat(T) { _ ->
        run block@{
            val p = readLine().toCharArray()
            val n = readLine().toInt()
            var r = false
            st = StringTokenizer(readLine(), "[],")
            repeat(n) { dq.add(st.nextToken().toInt()) }
            repeat(p.size) { i -> when (p[i]) {
                    'R' -> r = !r else -> {
                        if (dq.isEmpty()) { sb.appendLine("error"); return@block }
                        else if (r) dq.removeLast()
                        else dq.removeFirst()
                    }
                }
            }
            if (dq.isEmpty()) sb.appendLine("[]")
            else {
                sb.append("[").append(if (r) dq.removeLast() else dq.removeFirst())
                repeat(dq.size) { sb.append(",").append(if (r) dq.removeLast() else dq.removeFirst()) }
                sb.appendLine("]")
            }
        }
    }
    print(sb)
}

 

 

성공!

반응형