문제

아래 지문과 관련한 다음의 예시 중 옳은 것은?

컴퓨터 압축 프로그램 중 RLE(Run Length Encoding) 기법은 동일한 문자가 연속적으로 몇 번 반복되는지를 저장하는 방식이다.

편의상 0~9까지의 숫자만 사용하고,숫자 하나가 저장 장소 하나를 차지한다고 하자.

가령 7개의 기억저장 장소에 3이라는 수가 저장되어 있다면,이것은 3이 7개라는 식으로 저장하는 방식이다.

이러한 방식으로 저장을 하면 7개의 저장장소가 필요했던 것이 2개의 저장장소로도 충분하게 된다.

하지만 위의 방식은 문제가 있다.


가령 121이라는 수가 저장장소에 들어가 있을 때 이 기법을 적용하면 오히려 112111로 저장용량이 두 배로 늘어나기 때문이다.

따라서 연속되는 문자들이 나오는 경우에만 압축을 하라는 명령을 내려야 하고,주어진 문자의 경우 압축이 되었다는 것을 구분해 주는 기호가 필요하게 된다.


그 기호를 0이라고 약속할 것 같으면,111134라는 것을 압축하면 01434라는 문자열이 나온다.

결국 3개 이상의 동일 숫자가 반복되는 경우에만 압축의 효과가 나타난다.

이럴 경우 문자열 중에 0이라는 숫자가 낱개로 포함되어 있는 경우 또 다른 문제점이 발생한다.

그 이유는 그 0이라는 수가 압축을 통하여 도입된 것인지 원래 있던 것인지를 구분해 줄 필요가 있기 때문이다.

원래 문자열에 0이 단독으로 있는 경우에는 01을 더 붙여줌으로써 이 문제를 해결한다.

즉 111102라는 문자열을 압축하면,0140102라고 표현이 되는 것이다.

이렇게 약속을 할 것 같으면 의미의 혼돈 없이 압축을 하는 것도 가능하고,압축이 된 문자열을 왼쪽에서부터 원래의 상태로 회복시키는 압축 풀기도 가능하다.

① 00025072를 압축하면 0000250072가 된다.

② 연속된 문자열이 3개 이상인 경우에는 압축했을 때 저장용량의 크기가 줄어든다.

③ 040577은 압축이 된 문자열이 아니다.

④ 위의 내용만으로도 2라는 숫자가 연속적으로 30번 나온 경우 압축 결과를 알 수 있다.

⑤ 1010036의 압축을 풀면 100333333이다.

해설

③의 경우 이것이 압축이라고 한다면 처음의 0은 압축이 된다는 신호가 된다.

그런데 뒤에 40이 나오므로 4가 0개 쓰여 있었다는 결론이 되므로,이는 전에 4가 없었다는 말이 되고 이런 경우는 있을 수 없다.

따라서 압축이 아니므로 정답은 ③이다.

①00025072를 압축하면 032501072가 된다.

②지문의 내용에 따르면 정확히 세 개인 경우에는 줄어들지 않을 수 있다.

③의 경우 이것이 압축이라고 한다면 처음의 0은 압축이 된다는 신호가 된다.

그런데 뒤에 40이 나오므로 4가 0개 쓰여 있었다는 결론이 되므로 이는 전에 4가 없었다는 말이 되고,이런 경우는 있을 수 없으므로 압축이 아니다.

④의 경우 2가 30번 나온다면 한 자리에 0~9까지의 숫자만 써 넣을 수 있으므로 30을 표시할 방법이 없다.

⑤는 압축을 풀면 10333333이 된다.