문제 번호 1313 --암호 해독가 길동이

1313: 암호 해독가 길동이

시간 제한: 1 Sec  메모리 제한: 128 MB
제출: 24  해결 문제 수: 9
[제출][채점상황][게시판][:]

문제 설명

대 명문 경남과학고등학교를 다니는 동길이와 길동이는 컴퓨터를 좋아하여 ASCII코드를 외우고 다녔다(ASCII코드란, 영어 알파벳 및 몇가지 특수기호에 자연수를 부여한 것을 말한다). 이를 지켜보던 GT혹성의 건우는 '저런걸 어디 써먹겠어?' 하는 표정으로 한심한듯 쳐다봤다. 그 때, 동길이와 길동이에게 문득 아이디어가 떠올랐다. 그것을 써먹을 방법을 떠올린 것이다. 그것은 바로 '그들만의 대화' 였다. ASCII코드를 이용해 대화를 하자는 것이었다. 하지만 경남과학고생은 여기서 그치지 않고, 이진수로 고치자는 생각까지 했다.

C언어에서 ASCII코드로 나타내어지는 문자는 char형으로 선언되며 이는 1byte 즉 8bit로, 최대 256개를 표현할 수 있다. 즉, 각 문자에 대해 이진법으로 8자리면 충분하다는 것이다. 하지만 길동이와 동길이는 ASCII코드에 익숙했고, 128까지만 사용해도 일반적인 대화에 아무런 불편함이 없음을 알고 있었다. 즉, 7자리 역시 충분하다. 그래서 길동이와 동길이는 각 문자를 7자리 이진수로 암호화 하여 대화를 나누기로 했다. 이때, 그냥 하면 재미없기 때문에 0과 1을 사용하는 대신, 다른 두가지 문자를 사용하기로 했다. 예를 들면 원래 1001101인 것을 g88gg8g와 같이 다른 문자 2개로 표현하는 것이다. 이때 이러한 약속을 명시하기 위해 암호문의 맨 앞에는 01을 나타내는 문자를 표기하기로 했다. 정리하면 아래와 같다.

1. 암호화 하고자 하는 문장(영어 문장)의 각 문자는 해당 문자의 ASCII코드를 7자리 이진수로 변환한 문자열로 대체된다.

2. 대체된 문자열에서 0은 다른 문자 a0으로 변환되고, 1도 다른 문자 a1로 변환된다. (a0 != a1)

3. 암호문의 제일 앞에는 a0와 a1을 순서대로 써 준다.

4. 유효한 암호문의 끝에는 a0 7개를 쓴다.

길동이는 이러한 암호문을 매번 해석하기가 너무 귀찮아서 컴퓨터의 도움을 받으려고 한다. 여러분의 임무는 암호문을 영어 문장으로 복호화 하는 것이다. 행운을 빈다.

입력

ASCII코드로 표현 가능한 문자열이 들어온다(영문자와 몇가지 키보드에 있는 특수문자들). 여기에는 공백도 포함되며 탭문자 및 개행문자도 들어있다. 문자열의 길이는 10000000 이하이다.

출력

 입력된 암호문의 맨 앞 2개 문자를 순서대로 0과 1에 대응시켜 그 다음부터 7자리씩 끊어 이진수로 해석하여 해당 ASCII코드의 문자를 출력하며 전체 문장을 복호화 하면 된다. 0에 대응되는 문자가 7개 연속으로 나오면 복호화를 종료한다(이는 7개씩 끊었을 때 그 모두가 0이라는 뜻이다. 즉, 아래와 같은 상황을 보자.

10010000000110 과 같이 된 암호문(길이 14, 2개 묶음)에서 가운데에 0이 7개 연속으로 있다고 해서 복호화를 종료하면 안된다).

입력예시

AyyAyAyyyyyAAyAyyyAyyAAyyAyyAAAyAAAAAyAAAyAAyyAyyyyyyAyyyAyyAAyAyAyAAAAyAAAAAAA

출력예시

Well Done!

도움말

 이를 이용해 재밌는 암호문을 주고받아보라. 예를 들면 a0, a1을 공백과 탭문자로 지정하면 '안 보이는' 암호문을 주고받을 수 있다!


또한, a0와 a1을 \, /이나 ', " 혹은 S, $ 혹은 l, | 등으로 하면 상당히 더러운 암호문을 만들 수도 있다. 사실 이 암호문의 특성상 길어지면 다 더럽다.

출처

 

[제출][채점상황]