[백준] 비밀편지 (2596)(kotlin)

문제 설명

백준 2596번 문제 링크

입력 및 출력

» 입력

첫줄에는 보낸 문자의 개수(10개 보다 작다.)가 입력된다. 다음 줄에는 문자의 개수의 여섯 배 만큼의 숫자 입력이 주어진다.

» 출력

주어진 입력에서 지은이가 이해한 문자들을 출력하거나, 모르는 문자가 나오는 경우 그런 것이 처음 나오는 위치를 출력한다.

예제 입출력(테스트케이스)

입력 출력
3
001111000000011100
BAD

문제 풀이1

fun main(args: Array<String>) = with(System.`in`.bufferedReader()) {
    var str = ""
    val N = readLine().toInt()
    readLine().also { binary ->
        for (i in 0 until N) {
            val ch = decoder(binary.substring(i * 6 until (i + 1) * 6))
            if (ch in "A".."H") str += ch
            else {
                str = "${i + 1}"
                break
            }
        }
    }

    println(str)
}

fun decoder(binary: String): String {
    var code = ""
    var count = 0

    val set = arrayListOf("000000", "001111", "010011", "011100", "100110", "101001", "110101", "111010")

    for (i in set.indices) {
        var chCnt = 6

        for (j in 0 until 6) {
            if (binary[j] != set[i][j]) {
                chCnt--
            }
        }

        if (chCnt == 6) {
            code = set[i]
            break
        }

        if (chCnt == 5) {
            if (count >= 1) return "0"
            code = set[i]
            count++
        }
    }

    return when (code) {
        "000000" -> "A"
        "001111" -> "B"
        "010011" -> "C"
        "011100" -> "D"
        "100110" -> "E"
        "101001" -> "F"
        "110101" -> "G"
        "111010" -> "H"
        else -> "0"
    }
}