본문 바로가기

코딩테스트/Python

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

내 코드

def solution(s):
    answer = len(s)

    for i in range(1,(len(s)//2)+1):
        list_s = s
        a = []
        k=0
        for j in range((len(s)//i)+1):
            a.append(list_s[:i])
            list_s = list_s[i:]
            
        stack = []
        stack.append(a.pop(0))
        
        while len(a)>0:
            p = a.pop(0)
            
            if stack[-1] == p:
                k+=1
            else:
                if k>=1 : stack[-1] = str(k+1) + stack[-1]
                stack.append(p)
                k=0
        if k>=1 : stack[-1] = str(k+1) + stack[-1]
        answer = min(answer,len("".join(stack)))
    return answer

ㅠㅠㅠ 완전 노가다ㅠㅠ 전부다 구해준 다음에 가장 짧은 문자열을 구하였다.

문자를 1개로 자를때 부터 len(s)//2+1까지 구해준다.

자른 리스트의 가장 앞 원소가 stack의 가장 마지막 원소와 같으면 k를 더해줘서 몇번 반복되었는지 찾는다. 

다를경우에는 이때까지 저장해뒀던 k를 stack의 가장 마지막원소에 합쳐준다.

이렇게 for문으로 구해서 가장 짧은 문자열을 구했다.