프로그래밍-학습기록/코딩테스트

프로그래머스 | 파이썬 | 문자열 압축

leesche 2020. 12. 28. 16:52

코딩테스트 연습 - 문자열 압축

나의 풀이

  • 주어진 문자열 길이가 1이면 1을 반환한다.
  • 문자열을 가장 길게 압축하는 길이는 문자열 절반 길이이다.
  • 주어진 문자열을 1부터 문자열 절반 길이까지 압축한다.
    • 주어진 문자열을 특정 간격으로 자른다.
    • 자른 문자열을 비교하여 압축한다.
  • 압축한 문자열의 길이를 담은 리스트(length_list)에 모든 압축한 문자열의 길이를 담는다.
  • length_list의 최솟값을 구한다.
def solution(string):
    length_list = []
    string_length = len(string)
    if string_length == 1:
        return 1
    for compress_length in range(1, string_length // 2 + 1):
        length_list.append(
            len(compress_string_by_length(string, compress_length, string_length))
        )
    return min(length_list)

def compress_string_by_length(string, compress_length, string_length):
    compressed_string = ""
    splited_string = split_string_by_length(string, compress_length, string_length)
    duplicated_count = 1
    for i in range(len(splited_string)):
        if i < len(splited_string) - 1 and splited_string[i] == splited_string[i + 1]:
            duplicated_count += 1
        else:
            if duplicated_count == 1:
                compressed_string += splited_string[i]
            else:
                compressed_string += str(duplicated_count) + splited_string[i]
            duplicated_count = 1
    return compressed_string

def split_string_by_length(string, compress_length, string_length):
    return [
        string[i : i + compress_length]
        for i in range(0, string_length, compress_length)
    ]