이 튜토리얼에서는 파이썬을 이용해 런 렝스 인코딩(Run-Length Encoding)을 구현하는 방법을 알아보겠습니다. 런 렝스 인코딩은 주어진 문자열을 문자와 해당 문자의 빈도수로 구성된 새로운 문자열로 변환하는 기법입니다.
예를 들어 tutorialspoint라는 문자열은 t3u1o2r1i2a1l1s1p1n1로 인코딩됩니다. 즉, 각 문자와 그 빈도수를 순서대로 나열한 뒤 모두 하나의 문자열로 합쳐 반환하는 방식입니다.
구현 단계
프로그램을 작성하기 위한 절차는 다음과 같습니다.
- run_length_encoding이라는 이름의 함수를 작성합니다.
- OrderedDict를 사용해 딕셔너리를 초기화하여 각 문자의 초기 카운트를 0으로 설정합니다.
- 문자열의 모든 문자를 순회하면서 딕셔너리에서 해당 문자의 카운트를 증가시킵니다.
- 모든 문자와 빈도수를 하나의 문자열로 합친 후 출력합니다.
- 테스트용 문자열을 초기화하고 함수를 호출합니다.
예제 코드
위 내용을 실제 코드로 구현하면 다음과 같습니다.
# collections 모듈 임포트 import collections # 런 렝스 인코딩 함수 def run_length_encoding(string): # 카운트를 저장할 딕셔너리 초기화 count_dict = collections.OrderedDict.fromkeys(string, 0) # 문자열을 순회하며 빈도수 계산 for char in string: count_dict[char] += 1 # 인코딩 결과를 담을 빈 문자열 초기화 encoded_string = "" # 문자와 빈도수를 하나의 문자열로 합치기 for key, value in count_dict.items(): encoded_string += key + str(value) # 인코딩된 문자열 출력 print(encoded_string) # 테스트 문자열 초기화 및 함수 호출 string = "tutorialspoint" run_length_encoding(string) # 다른 문자열로 테스트 string = "aaaaaabbbbbccccccczzzzzz" run_length_encoding(string)
실행 결과
위 코드를 실행하면 다음과 같은 출력 결과를 확인할 수 있습니다.
t3u1o2r1i2a1l1s1p1n1 a6b5c7z6
추가 설명
collections.OrderedDict.fromkeys() 메서드를 사용하면 문자열에 등장하는 문자들의 첫 등장 순서를 유지하면서 각 문자를 키로 하는 딕셔너리를 손쉽게 생성할 수 있습니다. 일반 딕셔너리를 사용해도 파이썬 3.7 이상에서는 삽입 순서가 보장되지만, 하위 버전 호환성을 고려한다면 OrderedDict가 안전한 선택입니다.
마무리
이번 튜토리얼에서는 파이썬으로 런 렝스 인코딩을 구현하는 방법을 살펴보았습니다. 반복되는 문자가 많은 데이터를 압축하는 데 유용하게 활용할 수 있는 기법이니, 직접 코드를 작성해 보면서 익혀보시기 바랍니다.