기록

프로그래머스_python_문자열압축 본문

코딩테스트/python

프로그래머스_python_문자열압축

youngyin 2022. 2. 14. 16:58

문제

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

 

코딩테스트 연습 - 문자열 압축

데이터 처리 전문가가 되고 싶은 "어피치"는 문자열을 압축하는 방법에 대해 공부를 하고 있습니다. 최근에 대량의 데이터 처리를 위한 간단한 비손실 압축 방법에 대해 공부를 하고 있는데, 문

programmers.co.kr

풀이

문자열이 "a"처럼 1자리일 때를 고려해야 한다.

 

1. 문자열을 주어진 길이(unit)으로 자른다.

2. 잘린 문자열당 연속하여 출현하는 횟수를 구한다.

3. 연속 출연 횟수가 1인 문자열의 개수를 센다. (1을 표현하지 않으므로)

4. 압축된 문자열의 길이에서 1의 개수를 뺀다.

5. unit의 크기를 1에서 문자열의 절반까지 늘려가면서 1~4를 반복한다.

코드

def solution(s):
    ansList = [len(s)]
    
    for unit in range(1, len(s)//2 + 1) : 
        # 자르기
        mstring = [s[i:i+unit] for i in range(0 ,len(s), unit)]
        
        # 중복된 것 개수 세기
        countList = [mstring[0], 1]
        for i in range(1, len(mstring)) : 
            if mstring[i] != mstring[i-1] : countList.extend([mstring[i], 1])
            else : countList[-1]+=1
        
        # 1 개수 세기
        count_one = countList.count(1)
        
        # 압축된 문자열의 길이 
        ans = len("".join(map(str, countList))) - count_one
        ansList.append(ans)
    
    return min(ansList)
Comments