코드트리

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

개발자 성현 2025. 3. 21. 00:16

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

 

프로그래머스

SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

 

코드

def solution(s):
    answer = 1000
    length = len(s)
    
    if length == 1:
        return 1
    
    for num in range(1, len(s)):
        total = length % num
        time = length // num
        idx = 0
        cnt = 1
        word = ""
        while idx < num * time:
            if idx == 0:
                word = s[idx : idx + num]
                idx += num
                continue
            
            if s[idx : idx + num] == word:
                cnt += 1
                
            else:
                if cnt > 1:
                    total += (len(str(cnt)) + num)
                else:
                    total += num
                    
                cnt = 1
                word = s[idx : idx + num]
                
            idx += num
        
        if cnt > 1:
            total += (len(str(cnt)) + num)
        else:
            total += num
            
        answer = min(answer, total)

    return answer

 

 

풀이

s의 길이는 1 이상 1,000 이하입니다.

  • s의 길이가 1인 경우를 고려합니다.

반복되는 문자가 몇 개인지 붙여줘야한다.

  • 100이면 100을 10이면 10을 붙여줘야한다.
  • 문자열을 직접 만들고 계산해주는 편이 나을 것 같다.

마지막에 비교할 문자가 없는 경우

  • 마지막의 문자가 반복되고 있는 문자가 이어지고 있는지 반복된 적이 없는 문자가 남은건지 비교해야한다.