본문 바로가기
Algorithm(CodeTree, Python)/Simulation

[코드트리] 최단 Run Length 인코딩 Python

by kurooru 2023. 1. 17.
# a 입력
a = input()

# 함수들
# get_encoded_len(string)
def get_encoded_len(string):

    # curr_cnt
    curr_cnt = 1

    # cnt_list
    cnt_list = []

    # 전체를 돌며,
    for i in range(len(string) - 1):
        
        # 다음 것과 같으면
        if string[i] == string[i+1]:
            # curr_cnt 올려주기
            curr_cnt += 1
        
        # 다음 것과 다르면
        else:
            # curr_cnt cnt_list에 추가 (문자열로)
            cnt_list.append(str(curr_cnt))
            # curr_cnt 초기화
            curr_cnt = 1
    
    # 마지막 cnt까지 추가 (문자열로)
    cnt_list.append(str(curr_cnt))

    # encoded_len
    encoded_len = 0

    # cnt_list를 돌며
    for cnt in cnt_list:
        # encoded_len에 추가
        encoded_len += len(cnt) + 1
    
    # 반환
    return encoded_len

# get_RLE(shift)
def get_RLE(shift):

    # shifted_a
    shifted_a = a[-shift:] + a[:len(a) - shift]

    # 인코딩
    return get_encoded_len(shifted_a)

# 설계
# min_length
min_length = get_encoded_len(a)

# 완전 탐색 시작
for i in range(1, len(a)):
    # min_length update
    min_length = min(min_length, get_RLE(i))

# 출력
print(min_length)