문제 출처 : https://www.acmicpc.net/problem/2596
언어 : Kotlin
문제 설명 :
병현이는 지은이에게 문자 A, B, C, D, E, F, G, H 로 쓰여진 편지를 날마다 보내는데, 컴퓨터로 보내는 비밀편지로, 한 문자마다 0 또는 1인 숫자 여섯 개를 사용하여 보낸다. 둘 사이의 약속은 다음과 같다.
- A 000000
- B 001111
- C 010011
- D 011100
- E 100110
- F 101001
- G 110101
- H 111010
병현이가 어느 날 001111000000011100 을 보내면 지은이는 이것을 BAD로 이해하게 된다. 그런데 둘 사이에 약속이 잘 만들어져 있기 때문에, 통신에 문제가 생겨서 한 문자를 표시하는 여섯 숫자 중 어느 한 숫자만 틀리게 오는 경우, 지은이는 원래 보내려는 문자를 알아 낼 수가 있다.
예를 들어 지은이가 000100을 받았을 때, A와 숫자 한자만 다르고, 다른 문자들과는 각각 숫자 두 자 이상이 다르므로 지은이는 이것이 A라고 알아보게 된다.
다만 111111과 같이 모든 문자의 표현과 숫자 두 자 이상이 다른 경우에는 무슨 문자인지 알 수가 없게 된다. 예를 들어 지은이가 011111000000111111000000111111 을 받았을 때, BA 다음에 알아 볼 수 없는 문자가 나오는데. 이 경우 이런 것이 처음 나오는 문자의 위치인 3을 출력한다.
지은이가 받은 편지를 보고 문자들을 알아내어 출력하거나, 모르는 문자가 있는 경우, 이것이 처음 나오는 위치를 출력하는 프로그램을 작성하시오.
입력 :
첫줄에는 보낸 문자의 개수(10개 보다 작다.)가 입력된다. 다음 줄에는 문자의 개수의 여섯 배 만큼의 숫자 입력이 주어진다.
출력 :
주어진 입력에서 지은이가 이해한 문자들을 출력하거나, 모르는 문자가 나오는 경우 그런 것이 처음 나오는 위치를 출력한다.
제한 사항 :
- 시간 제한 : 1초
- 메모리 제한 : 128MB
입출력 예 :
입력 | 출력 |
3 001111000000011100 |
BAD |
5 011111000000111111000000111111 |
3 |
풀이 :
import java.io.BufferedReader
import java.io.BufferedWriter
import java.io.InputStreamReader
import java.io.OutputStreamWriter
fun main() = with(BufferedReader(InputStreamReader(System.`in`))) {
val bw = BufferedWriter(OutputStreamWriter(System.out))
val sb = StringBuilder()
val s = readLine().toInt()
val input = readLine().chunked(6)
for (i in input.indices) {
val temp = makeWord(input[i])
if (temp in "A" .. "H") {
sb.append(temp)
} else {
sb.clear().append("${i + 1}")
break
}
}
bw.write(sb.toString())
bw.flush()
bw.close()
}
fun makeWord(str: String): String {
var code = ""
var cnt = 0
val list = arrayListOf("000000", "001111", "010011", "011100", "100110", "101001", "110101", "111010")
for (i in list.indices) {
var tempCnt = 6
for (j in 0 until 6) {
if (str[j] != list[i][j]) tempCnt--
}
if (tempCnt == 6) {
code = list[i]
break
}
if (tempCnt == 5) {
if (cnt >= 1) return "0"
code = list[i]
cnt++
}
}
return when (code) {
"000000" -> "A"
"001111" -> "B"
"010011" -> "C"
"011100" -> "D"
"100110" -> "E"
"101001" -> "F"
"110101" -> "G"
"111010" -> "H"
else -> "0"
}
}
'백준 > 문제' 카테고리의 다른 글
1141번: 접두사 (0) | 2024.03.14 |
---|---|
25757번: 임스와 함께하는 미니게임 (0) | 2024.03.13 |
3048번: 개미 (0) | 2024.03.13 |
9536번: 여우는 어떻게 울지? (0) | 2024.03.12 |
21964번: 선린인터넷고등학교 교가 (0) | 2024.03.12 |
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!