카테고리 없음

[파이썬] 문자열 압축 - 2020 KAKAO BLIND RECRUITMENT[CODING TEST #55]

ALTERww 2022. 8. 17. 01:40
320x100

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

 

 

 

문자열 s의 절반에 해당하는 길이까지 문자열 압축 단위를 반복하여

조건에 맞게 새로운 문자열을 완성하고, 가장 짧은 문자열의 길이를 갱신하여 반환하도록 하면 된다.

 

pattern을 구하는 과정에서, len(s)가 1일 때는 len(s)//2 + 1 = 1이 되어 range(1,1)은 내부 코드가 실행되지 않는다.

따라서 len(s)//2 + 2만큼 반복하도록 하였다.

 

def solution(s):
    answer = 987654321
    for i in range(1,len(s)//2 + 2): # len(s) == 1인 경우를 대비, +1 대신 +2
        pattern = s[:i]
        new_s = ''
        count = 1
        for split in range(i,len(s)+1,i):
            if pattern == s[split:split+i]: # pattern과 같은 단어를 만났다면
                count += 1
            else: # 다를 때
                if count == 1: # 1회 반복되면 숫자 X
                    new_s += pattern
                else: # 2회 이상 반복되면 숫자 포함
                    new_s = new_s + str(count) + pattern
                # count, pattern 초기화
                count = 1
                pattern = s[split:split+i]
        answer = min(answer, len(new_s)+len(s) % i)
    return answer