[Programmers] 문자열 압축 python

🏷 문제


💡 코드

def solution(s):
    s_list=[]

    if len(s) == 1:
        return 1

    # 절반 이상 자르는 경우는 X
    for i in range(1, (len(s)//2)+1):
        res = ''
        # abab = 2ab가 되어야 하므로 0이 아닌 1로 초기화
        cnt = 1
        # 차례로 [0:1]-1개단위, [0:2]-2개단위, [0:3]-3개단위 ...
        before = s[:i]
        # i부터 i만큼 문자를 계속 자름
        # ex_ i=3이면, 위에서 [0:3]까지가 들어있는 before와 밑의 경우를 비교
        for j in range(i, len(s)+i, i):
            if s[j:j+i] == before:
                cnt += 1
            else:
                # 이전과 전혀 연관이 없는 경우에는 결과값에 before를 그대로 넣어줌
                if cnt == 1:
                    res += before
                # 이전까지 연관이 있는 경우가 있었다면, 그 전까지의 before를 cnt와 함께 넣어줌
                else:
                    res = res + str(cnt) + before
                    # cnt 초기화를 해주어야 다시 1부터 셀 수 있음
                    cnt = 1
                # 다음 비교대상 설정
                before = s[j:j+i]

        # 마지막에 남은 문자들 처리
        if cnt == 1:
            res += before
        s_list.append(len(res))
    return min(s_list)

while True:
    s = input()
    res = solution(s)
    print(res)

🔑

엣지케이스의 중요성,,,,,

좋은 웹페이지 즐겨찾기