-
JUNGOL 실력키우기 1239 : 비밀편지보관함 2018. 6. 29. 19:33
병현이는 지은이에게 문자 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개 보다 작다.)가 입력된다. 다음 줄에는 문자의 개수의 여섯 배 만큼의 숫자 입력이 주어진다.
주어진 입력에서 지은이가 이해한 문자들을 출력하거나 모르는 문자가 나오는 경우 그런 것이 처음 나오는 위치를 출력한다.
[Copy] 3 001111000000011100
[Copy] BAD
[Copy] 5 011111000000111111000000111111
[Copy] 3
처음 문제 읽고 어떻게 풀어야 할지 한번에 감이 오질 않아서 그냥 의식의 흐름대로 코드를 작성했는데 어떻게든 해결은 됐습니다.
그런데 코드가 영 보기 좋지가 않네요. 일단 다른 분들은 어떻게 해결했는지 검색해 보고
괜찮은 코드가 있으면 분석해 보고 다른 버전으로 해결을 해 봐야할 것 같네요.
P.S.
다른 블로그에서 코드를 분석해 본 결과 과정은 거의 비슷한데 클래스를 이용했을 때 상당히 보기 깔끔해지네요.
거의 제가 추구하는 읽히는 코드가 되는 것 같습니다. 추가로 약간의 속도 향상이 있는 듯 합니다.