이진 암호
0과 1로 이루어진 문자열을 다음 규칙에 따라 압축하려고 한다.
현재 살펴보는 문자열의 모든 문자가 같다면 그 문자 하나를 압축 결과에 기록한다.
현재 문자열에 0과 1이 모두 존재한다면 다음 순서로 처리한다.
- 압축 결과에
-를 기록한다. - 현재 문자열을 길이가 같은 왼쪽 절반과 오른쪽 절반으로 나눈다.
- 왼쪽 절반을 압축한 결과와 오른쪽 절반을 압축한 결과를 차례대로 기록한다.
예를 들어 1101은 다음과 같이 압축된다.
1101에는 서로 다른 문자가 있으므로-를 기록하고11과01로 나눈다.11은 모든 문자가 같으므로1을 기록한다.01에는 서로 다른 문자가 있으므로-를 기록하고0과1로 나눈다.- 나누어진 두 문자열에서 각각
0과1을 기록한다.
따라서 1101을 압축한 결과는 -1-01이다.
이진 문자열이 주어졌을 때, 위 규칙으로 압축한 결과를 구하는 프로그램을 작성하시오.
입력
첫째 줄에 문자열의 길이 \(N\)이 주어진다.
둘째 줄에 길이가 \(N\)인 이진 문자열 \(S\)가 주어진다.
출력
\(S\)를 주어진 규칙에 따라 압축한 결과를 출력한다.
제한 사항
- \(1 \le N \le 2^{18}\)
- \(N\)은 2의 거듭제곱이다. 즉, 어떤 음이 아닌 정수 \(k\)에 대해 \(N=2^k\)이다.
- \(S\)는
0과1로만 이루어져 있다.
예제 입력 1
4
0000
예제 출력 1
0
예제 설명 1
문자열의 모든 문자가 0으로 같으므로 0 하나만 기록한다.
예제 입력 2
4
1101
예제 출력 2
-1-01
예제 설명 2
전체 문자열을 나눈 뒤 왼쪽 11에서는 1을 기록한다. 오른쪽 01은 다시 나누어 -01을 기록하므로 전체 압축 결과는 -1-01이다.
코멘트