쿼드 트리
면접 대비시간 제한1초메모리 제한128 MB
쿼드 트리 문자열을 n x n 흑백 그림으로 복호화한 뒤 각 행을 XBM 16진수 바이트로 출력한다.
문제
고대 아즈텍 문명 유적지에서 보물을 찾던 한신이는 긴 문장이 적힌 파피루스 두루마리를 발견했다. 그 문장은 , , 세 종류의 문자로만 이루어져 있었다.
암호학을 조금 배웠던 한신이는 이 문자열이 3000년 전에 만들어진 유명한 쿼드 트리(quad tree) 암호 구조라는 것을 알아냈다.
쿼드 트리 암호화는 그림(예를 들어 보물지도)을 다음 규칙으로 인코딩한다.
- 그림 전체가 검은색이면 로 변환한다.
- 그림 전체가 흰색이면 로 변환한다.
- 검은 부분과 흰 부분이 섞여 있으면 형식으로, 그림을 왼쪽 위, 오른쪽 위, 왼쪽 아래, 오른쪽 아래 순서의 네 부분으로 재귀적으로 쪼갠 뒤 각 부분()을 다시 변환한다.
모든 그림은 픽셀의 정사각형이며, 은 2의 거듭제곱이고, 항상 완벽한 쿼드 트리 구조로 인코딩되어 있다.
예를 들어 체스판은 로, 체스판은 로 나타낼 수 있다.
이 쿼드 트리 문자열을 XBM 형식 파일로 해독하는 프로그램을 작성하라.
입력
첫째 줄에 정수 ()이 주어진다. 이 값은 그림의 가로·세로 픽셀 크기이며, 항상 2의 거듭제곱이다.
둘째 줄에 , , 로만 이루어진 문자열이 주어진다. 이 문자열은 픽셀 그림을 쿼드 트리 구조로 인코딩한 것이다.
출력
다음 형식으로 XBM 파일 내용을 출력한다.
- 첫째 줄:
#define quadtree_width n(은 가로 픽셀 크기이다.) - 둘째 줄:
#define quadtree_height n(은 세로 픽셀 크기이다.) - 셋째 줄:
static char quadtree_bits[] = { - 이어지는 개의 줄: 그림의 각 행을 개의 16진수 값으로 변환하여 출력한다. 각 16진수 값은 8개의 픽셀을 왼쪽에서 오른쪽 순서로 담은 8비트 값이며, 가장 왼쪽 픽셀의 비트 값이 1이고 가장 오른쪽 픽셀의 비트 값이 128이다. 검은 픽셀은 1, 흰 픽셀은 0으로 둔다. 각 값은
0xdd형식(두 자리 소문자 16진수)으로 쓰고, 각 값 뒤에 쉼표(,)를 붙인다. 예를 들어 8픽셀 는 =0x9e이다. - 마지막 줄:
};