파이썬 알고리즘-95 (프로그래머스) 문자열 압축

jiffydev·2021년 1월 13일
0

Algorithm

목록 보기
102/134

코드

def solution(s):
    answer = 1e10
    tmp=''
    if len(s)==1:
        return 1
    # i개 단위로 자르는 반복문
    for i in range(1, len(s)):
        tmp+=s[0:i]
        cnt=1
        res=''
        # 다음 i개 단위로 자른 문자열과 tmp에 들어있는 문자열을 비교
        for j in range(i,len(s),i):
            # 같다면 카운트만 우선 늘려줌
            if s[j:j+i]==tmp:
                cnt+=1
            # 다르다면 같은 것이 없을 때와 2개 이상일 때로 나눈다
            else:
                if cnt>1:
                    res+=str(cnt)+tmp
                    tmp=s[j:j+i]
                    cnt=1
                else:
                    res+=tmp
                    tmp=s[j:j+i]
        # 마지막 문자열은 반복문에서 저장이 안돼서 끝나고 res로 넘겨줌
        if cnt>1:
            res+=str(cnt)+tmp
        else:
            res+=tmp
        tmp=''
        answer=min(answer,len(res))
    return answer

다른 사람의 풀이

def compress(text, tok_len):
    words = [text[i:i+tok_len] for i in range(0, len(text), tok_len)]
    res = []
    cur_word = words[0]
    cur_cnt = 1
    for a, b in zip(words, words[1:] + ['']):
        if a == b:
            cur_cnt += 1
        else:
            res.append([cur_word, cur_cnt])
            cur_word = b
            cur_cnt = 1
    return sum(len(word) + (len(str(cnt)) if cnt > 1 else 0) for word, cnt in res)

def solution(text):
    return min(compress(text, tok_len) for tok_len in list(range(1, int(len(text)/2) + 1)) + [len(text)])
profile
잘 & 열심히 살고싶은 개발자

0개의 댓글