[백준] 비밀편지 (2596)(kotlin)
문제 설명
입력 및 출력
» 입력
첫줄에는 보낸 문자의 개수(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"
}
}