(백준/Kotlin) 5430번 : AC

2021. 11. 29. 11:14·CodingTest

난이도: 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)
}

 

 

성공!

반응형
저작자표시 비영리 (새창열림)
'CodingTest' 카테고리의 다른 글
  • (백준/Kotlin) 9375번 : 패션왕 신해빈
  • (백준/Kotlin) 1159번 : 농구 경기
  • (백준/Kotlin) 2667번 : 단지번호붙이기
  • (백준/Kotlin) 5635번 : 생일
Kua
Kua
정보 공유, 개인 정리 공간 입니다.
  • Kua
    Kua's Miscellaneous
    Kua
    • 분류 전체보기 (185)
      • 대문 (2)
      • Tips (25)
        • Chrome (2)
        • Windows (4)
        • IDE (3)
        • 기타 (16)
      • CodingTest (44)
      • Language (20)
        • PHP (5)
        • C# (7)
        • Java (1)
        • Kotlin (7)
      • Framework & Runtime (16)
        • SpringBoot (12)
        • Node.js (2)
        • Vue.js (1)
        • Gradle (1)
      • DevOps (13)
        • Linux (1)
        • Docker (4)
        • Kubernetes (2)
        • Apache Kafka (1)
        • AWS (1)
      • 일상다반사 (53)
        • 도서 (1)
        • 개발 (8)
        • 후기 - IT (7)
        • 후기 - 일상 (13)
        • 차가리 (4)
        • 방송통신대학교 (4)
        • 음식 (2)
      • Games (12)
        • Minecraft (7)
        • VR (2)
        • 그외 (3)
  • 최근 글

  • 인기 글

  • 태그

    github
    Spring Boot
    Kotlin
    Plugin
    error
    spring
    bronze1
    bronze2
    알고리즘
    후기
    c#
    코딩테스트
    갤럭시
    Windows
    Algorithm
    minecraft
    codingtest
    java
    백준
    Silver5
  • 전체
    오늘
    어제
  • hELLO· Designed By정상우.v4.10.0
Kua
(백준/Kotlin) 5430번 : AC
상단으로

티스토리툴바