Computer >> 컴퓨터 >  >> 프로그래밍 >> Python

파이썬(Python)으로 런 렝스 인코딩(Run-Length Encoding) 구현하기

이 튜토리얼에서는 파이썬을 이용해 런 렝스 인코딩(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가 안전한 선택입니다.

마무리

이번 튜토리얼에서는 파이썬으로 런 렝스 인코딩을 구현하는 방법을 살펴보았습니다. 반복되는 문자가 많은 데이터를 압축하는 데 유용하게 활용할 수 있는 기법이니, 직접 코드를 작성해 보면서 익혀보시기 바랍니다.