본문 바로가기
코딩공부/프로그래머스 (python)

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

by CodingKwon 2021. 8. 2.

문제 링크 (Level 2)

https://programmers.co.kr/learn/courses/30/lessons/60057

 

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

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

programmers.co.kr

 

나의 코드 (python)

def solution(s):
    answer = 0
    L = []
    
    # 문자열 길이가 1개인건 1개만 그냥 1
    if len(s) == 1:
        return 1

    # 반복이 되는 것이기 때문에 절반만 검증
    for i in range(1, len(s)//2 + 1):
        arr = ""
        cnt = 1
        tmp = s[:i]
        # 1개부터 절반까지 반복되는 값을 검증
        for j in range(i, len(s), i):
            if s[j:i+j] == tmp:
                cnt += 1
            else:
                # 반복과 다른 값을 만났을 때
                if cnt == 1:
                    arr += tmp
                    tmp = s[j:i+j]
                else:
                    arr += str(cnt) + tmp
                    tmp = s[j:i+j]
                    cnt = 1
        print(arr)
        # 마지막까지 같은 경우를 검증하기 위함
        if cnt == 1:
            arr += tmp
        else:
            arr += str(cnt) + tmp
        L.append(len(arr))
    
    answer = min(L)

    return answer

 

반복이 되려면 문자열 길이의 1/2을 넘기면 안 됩니다.

 

이후에는 1개 문자열로 반복을 검증 2개 문자열로 반복을 검증 ... 이런 식으로 글자 수를 늘려서 반복을 찾아봅니다.

 

마지막으로 마지막 비교를 확인해서 넣어줍니다.

댓글