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

정민·2022년 4월 7일
0

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

처음 든 생각

만약 문자열의 길이가 10이라면 압축할 수 있는 최대 범위는 5
즉, 문자열이 s라고 했을 때 len(s)의 1/2 이다.
가능한 단위마다(1~len(s)/2) 해당 문자열을 압축 시켜 보고,
그 중 가장 작은 것을 출력하면 된다.

성공 코드

def solution(s):
    length=len(s)
    minlen=length
    str1, str2 = "",""
    
    #가능한 단위 범위 만큼 반복
    for unit in range(1,int(length/2)+1):
        tmplen=0 #해당 단위에서의 길이를 저장하는 변수
        num=1 #같은 갯수를 세는 변수
        cur=0 #커서
        while cur<length:
            str1=s[cur:cur+unit]
            str2=s[cur+unit:cur+(2*unit)]
            #str1, str2에 단위만큼 잘라준다
            if str1==str2: 
            #만약 같다면 다음 문자에도 같을 확률이 있으니 num+=1 해준 후 넘어간다. 
                num+=1
            else:
            #다르다면 문자열에 추가 시켜준다
                if num==1: #만약 num=1이라면 => 이전에 같은 문자열이 없어서 압축 시킬 필요가 없다면 
                    tmplen+=len(str1) #해당 문자열(str1)의 길이만 더함
                else: #1보다 크다면 => 이전에 같은 문자열이 있었어서 압축 시켜야 한다.
                    tmplen+=len(str(num)) #num의 자릿수를 고려하기 위해 len(str(num))을 더해준후 
                    tmplen+=len(str1) #해당 문자열(str1)의 길이를 더해준다.
                    num=1       
            cur+=unit
        #작은 길이를 저장    
        minlen=min(minlen,tmplen)

    return minlen
profile
괴발개발~

0개의 댓글