난이도: 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)
}
성공!
반응형