본문 바로가기
알고리즘/프로그래머스

[프로그래머스] 문자열 압축 (python)

by 김홍중 2021. 7. 1.

문제링크

 

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

데이터 처리 전문가가 되고 싶은 "어피치"는 문자열을 압축하는 방법에 대해 공부를 하고 있습니다. 최근에 대량의 데이터 처리를 위한 간단한 비손실 압축 방법에 대해 공부를 하고 있는데, 문

programmers.co.kr

 

풀이

0. 원본string이 1이면 1을 바로 리턴합니다 (주의)

1. 1부터 중간개수의 cut으로 인덱싱하여 원본string을 쪼갭니다.

2. 이전과 현재 인덱싱한 string을 비교하여 변환된 string을 이어서 생성합니다.

3. 변환된 string을 차례로 저장합니다.

4. 변환된 string 중에 최소 길이를 구해서 리턴합니다.

 

코드

def solution(origin):
    start = 0
    current = ""
    prev = ""
    candidates = []
    equal = 0
    changed_string = ""
    unit = 1
    
    origin_length = len(origin)
    if origin_length == 1:
        return 1
    
    end = start + unit
    while unit <= (origin_length // 2):
        while end < origin_length + 1:
            current = origin[start:end]
            if current == prev:
                equal += 1
            elif current != prev and equal <= 0:
                equal += 1
            elif current != prev and equal > 0:
                if equal == 1:
                    changed_string += prev
                else:
                    changed_string += str(equal) + prev
                equal = 1
            start += unit
            end += unit
            prev = current

        if equal == 1:
            changed_string += prev
        else:
            changed_string += str(equal) + prev
            
        if len(origin) % (end - start) != 0:
            changed_string += origin[start:end]
            
        candidates.append(changed_string)
        
        unit += 1
        start = 0
        end = start + unit
        changed_string = ""
        prev = ""
        equal = 0

    candidates_lengths = [len(candidate) for candidate in candidates]
        
    return min(candidates_lengths)

댓글