진박사의 일상

[프로그래머스] 20년 카카오 코테 - 문자열 압축 본문

프로그래밍/코딩테스트 공부

[프로그래머스] 20년 카카오 코테 - 문자열 압축

진박사. 2021. 9. 8. 14:36

문제 : 문자열을 N개 단위로 잘라 반복된 시퀀스와 그 반복 횟수로 나타내 줄이는 압축을 할 때 최대로 압축한 문자열의 길이는?

 

def solution(s):
    answer = 0
    if len(s) == 1:
        return 1
    half_l = len(s)//2 # 8 -> 4
    for size in range(1,half_l+1): # 1-4 #split size 
        word = ""
        count = 0
        for start in range(0,len(s),size): # size=1일때 0-7, 2일때 0-6
            now_seq = s[start:start+size] #현재 분할
            next_seq = s[start+size:start+size*2] #다음 분할
            
            before_seq = [] #이전 분할
            if start-size >= 0:
                before_seq = s[start-size:start]
            #print(now_seq, next_seq, before_seq)
            if now_seq == next_seq: # 같으면
                count += 1
                continue
            else: #다르면
                if before_seq and before_seq == now_seq: #이전 분할이 있고 현재랑 같으면
                    count += 1
                    word += str(count)+now_seq # count 수가 1의 자리 이상으로 나올 수 있다는 점이 포인트!
                    count = 0
                else: #이전 분할이 없거나 현재랑 다르면
                    word += now_seq
                    continue
        #print(word)
        if answer == 0:
            answer = len(word)
        else:
            answer = min(answer, len(word))
        
    
    return answer

후기 : 반복횟수가 1의 자리수 이상으로 나오는 경우를 고려하지 못해 엄청 해멨다... 역시 이런 하나하나가 경험의 차이인듯