메시지의 두 가지 모양
시간 제한1초메모리 제한1024 MB
중괄호로 묶인 정수 목록을 16진수 문자열로 압축하여 출력합니다.
문제
Juku는 학생 위성 프로젝트에 참여하고 있으며, 지상에서 보내는 메시지로 위성을 제어하는 일을 맡고 있다. 메시지는 시작 기호 '{'와 끝 기호 '}'로 감싸지며, 공백으로 구분된 정수를 담고 있다. 느린 데이터 통신이 걱정된 Juku는 메시지를 더 짧은 형태로 바꾸기로 했다.
텍스트로 적힌 숫자는 1바이트, 즉 8비트를 차지한다. 그러나 숫자 하나를 16진수로 쓰면 4비트만 차지한다. 16진수 숫자 중에는 메시지를 압축하는 데 쓸 수 있는 값도 있다. (16진수에서는 숫자로 09와 AF를 쓰며, 09의 값은 이고 AF의 값은 이다. 두 자리 16진수 의 값은 이다.)
Juku는 다음 규칙으로 메시지를 압축한다.
- 메시지의 시작 표시는 16진수 숫자
E이고, 끝 표시는 16진수 숫자F이다. - 입력 메시지의 수에 0이 3개에서 15개까지 연속으로 있으면, 그 0들을 16진수 숫자
B로 바꾸고, 그 뒤에 0의 연속 개수를 16진수 숫자3F로 쓴다. 연속 개수가 15보다 크면B를 쓰고0을 쓴 뒤, 개수를 두 자리 16진수10FF로 쓴다. - 입력 메시지의 각 수 은 16진수 숫자
A로 시작하도록 쓴다. 의 자릿수가 15 이하이면A를 쓰고, 이어서 자릿수를 16진수 숫자1F로 쓴다. 의 자릿수가 15보다 크면A를 쓰고0을 쓴 뒤, 자릿수를 두 자리 16진수10FF로 쓴다. 두 경우 모두 자릿수 뒤에 자체를 쓴다. 에 0이 2개보다 많이 연속으로 있으면, 먼저 규칙 2로 압축하고, 자릿수로는 원래 수가 아니라 압축 결과의 자릿수를 사용한다. - 압축된 메시지의 16진수 숫자 개수가 홀수이면, 맨 끝(
F뒤)에D를 붙인다.
입력 파일에서 메시지를 읽고, 압축 결과를 텍스트 형태로 출력 파일에 쓰는 프로그램을 작성하라.
입력
입력 파일에는 전송할 메시지가 한 줄에 정확히 하나 있다. 메시지에는 최대 100개의 양의 정수가 있으며, 모두 보다 작다.
출력
출력 파일의 한 줄에 압축된 메시지를 텍스트 형태로 출력한다. 각 16진수 숫자는 한 글자로 쓴다. 사람이 읽기 쉽도록 이렇게 쓰는 것이다. 16진수 숫자들을 실제 바이트로 묶으면 사람이 읽기 어렵다.