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

섬섬's 개발일지·2022년 2월 15일
0

프로그래머스

목록 보기
16/50

문제

문자열에서 같은 값이 연속해서 나타나는 것을 그 문자의 개수와 반복되는 값으로 표현하여 더 짧은 문자열로 줄여서 표현하는 알고리즘을 공부하고 있습니다.
압축할 문자열 s가 매개변수로 주어질 때, 위에 설명한 방법으로 1개 이상 단위로 문자열을 잘라 압축하여 표현한 문자열 중 가장 짧은 것의 길이를 return 하도록 solution 함수를 완성해주세요.

제한사항

  • s의 길이는 1 이상 1,000 이하입니다.
  • s는 알파벳 소문자로만 이루어져 있습니다.

풀이

문자 1개 단위부터 length(s의 길이) / 2 단위로 잘랐을 때의 압축된 문자열을 구한 후, 문자열 길이의 최소값을 구하면 된다.

코드

def solution(s):
    length = len(s)
    answer = length
    
    for i in range(1, length//2+1):
        result = ''
        tmp = s[:i]
        num = 1
        for j in range(i,length,i):
            endIndex = i+j if i+j < length else length
            next = s[j:endIndex]
            if next == tmp :
                num += 1
            else :
                result += (str(num) if num != 1 else '') + tmp
                tmp = next
                num = 1
        result += (str(num) if num != 1 else '') + tmp
        answer = min(answer, len(result))
    return answer
profile
섬나라 개발자

0개의 댓글