[プログラマー]文字列圧縮(Level 2)-Python



1.問題の解釈


-文字列に重複する文字を重複数でグループ化して圧縮します.
-文字を1単位から~n単位に圧縮し、最短の単位文字数を出力します.
−例えば、「aabbaccc」は1単位−2 a 2 ba 3 cに圧縮することができ、「abcabcede」は3単位−2 abcdedeに圧縮することができる.圧縮された文字列の長さは、それぞれ7、8に戻せばよい.

2.解答


-圧縮可能な単位は少なくとも1〜最大mathである.床まで(文字列の長さ/2).
-1を最大に圧縮し、長さを比較します.
-文字列を圧縮できる関数と圧縮単位を使用します.
import math

def solution(s):
    def simplify(num):
        stack = []
        rst = ''
        
        for i in range(0, len(s), num):
            cur = s[i: i + num] # 지정한 단위 만큼 자른다.
            if len(stack) == 0: stack.append([1, cur]) # 만약 stack이 비었다면 반복 횟수 1, 문자
            elif stack[-1][1] == cur: stack[-1][0] += 1 # stack안에 있는 마지막 문자와 비교해서 만약 같다면 반복 횟수 += 1
            else: stack.append([1, cur]) # 다르다면 반복 횟수 1, 문자
        
        for i in stack:
            rst += i[1] if i[0] == 1 else str(i[0]) + i[1] # stack이 완성되면 반복 횟수가 1인 경우를 제외하고 반복횟수 + 문자로 새로운 문자열을 만든다.
            
        return len(rst) # 문자열의 길이 리턴
    
    answer = []
    
    if len(s) < 2: return 1
    
    for i in range(1, math.floor(len(s) // 2) + 1): # 문자열의 절반까지 반복
        answer.append(simplify(i)) # 길이를 구해서 answer에 append
        
    return min(answer) # 가장 짧은 길이 리턴
もっといい方法があると思います.ちょっと無知な(?)方法ですが、テストに合格しました.