7JeY world

[Programmers] 문자열 압축 / Python 본문

Programming/for coding test

[Programmers] 문자열 압축 / Python

7JeY 2022. 2. 25. 15:26
반응형
def solution(s):
    answer = len(s)

    for i in range(1, int(len(s)/2) +1): #압축 단위는 아무리 커봤자 문자열 길이의 절반
        pos = 0 #어느 위치에서 문자열을 처리하고 있는지 표현하는 변수
        #압축되었을때의 길이만 필요하다..길이만 구해보겠음
        length = len(s) #문자열 길이로 표현한 다음 압축되는것 만큼 빼거나 더해서 구한다

        while pos + i <= len(s) : #진행은 문자열 끝까지
            unit = s[pos:pos+i] #압축 하고자 하는 단위만큼 문자열을 불러온다
            pos += i
            #포지션 진행해서 거기에 이제 ab가 또 있는지 확인해야한다

            cnt = 0
            while pos + i <= len(s):
                if unit == s[pos:pos+i]: #ab읽어서 다음 2~4에 ab가 있는지 같은지
                    cnt +=1
                    pos += i
                else:
                    break #아니면 while문 빠져나오기..
            #이 while끝나고 나면 unit이 몇번 반복되었는지 구해졌을 것

            if cnt > 0: #반복된게 있다고 하면 ..
                length -= i  * cnt # 한번 반복되면 한번 빼고 두번 반복되면 두번 빼고 이런식

                if cnt < 9 :
                    length += 1
                elif cnt < 99 :
                    length += 2
                elif cnt < 999:
                    length += 3
                else:
                    length +=4

        answer = min(answer, length)
    return answer

 

반응형
Comments