동캄의 코딩도장

프로그래머스 level2 [문자열 압축] 파이썬 본문

코테/프로그래머스

프로그래머스 level2 [문자열 압축] 파이썬

동 캄 2021. 12. 9. 22:44

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

 

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

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

programmers.co.kr

#프로그래머스 문자열 압축
def solution(s):
    answer = 0
    for i in range(1,(len(s)//2)+1):
        cnt=1
        lst=[]
        j=0
        previous=''
        while (j+i)<=len(s):
            if s[j:j+i]==previous:
                cnt+=1
            else:
                if cnt!=1:
                    lst.append(cnt-1)
                cnt=1
                previous=s[j:j+i]
            j+=i
        if cnt>1:
            lst.append(cnt-1)
        gain=0
        for k in range(len(lst)):
            gain+=lst[k]*i-len(str(lst[k]+1))
        answer=max(answer,gain)
    return len(s)-answer

s길이의 절반까지 반복문을 시행한다. (길이가 절반이상이면 압축 불가능)

1부터 s절반길이까지 반복문을 반복해 나가면서, 문자열 압축 개수를 카운트하여 lst에 담는다.

gain을 통해 압축했을 때 얻는 이득을 구하고, 최종 길이( len(s)-answer)을 리턴한다.