문제
이진 압축이란 {0, 1}로 이루어진 길이가 2k인 문자열에 대해서,
모두 같은 문자가 될 때까지 크기가 2k-1인 두 그룹으로 분할하여
모두 같은 문자가 되도록 하는 과정으로 암호화를 한다.
만약 주어진 원문이 길이가 4인 "0000"라면, 암호문은 "0"이다.
만약 주어진 암호문이 길이가 4인 "1101"이라면 모든 문자가 같지 않기 때문에
"11 01"로 일단 한 번 분할하고 다시 뒷부분은 "01"로 같지 않으니
"11 0 1"로 분할한다.
즉 이로써 만들어진 암호문은 "-1-01"이 된다. "-1-01"의 의미는
- : 먼저 전체를 분할하고
1 : 분할된 왼쪽 부분은 모두 1이고
- : 오른쪽 분할은 다시 분할하며, 01 : 분할된 결과는 0과 1이라는 의미이다.
길이가 n인 원문을 입력받아서 암호문을 출력하는 프로그램을 작성하시오.
입력
첫 번째 줄에 암호문의 길이 n이 입력된다.
두 번째 줄에 길이가 n인 0, 1로 구성된 암호문이 입력된다.
(단, 1 <= n <= 218) (단, n은 모두2k(k는 자연수))
출력
위 원리로 만들어진 암호문을 출력한다.
예제 #1
4
0000
0
예제 #2
4
1101
-1-01
예제 #3
4
0100
--010
출처
문제해결을 위한 창의적 알고리즘 (고급)|comkiwer