👀 문제
https://programmers.co.kr/learn/courses/30/lessons/60057
👊 도전
1. 설계
- 문자열 자를 사이즈를 구한다.
 - 기준 문자열(temp_s)와 현재 문자열(s[i:i+size])가 같으면 cnt++한다.
 - 아니라면, result에 저장한다.
 - 압축된 문자열 길이와 answer 중 min 값을 answer에 저장한다.
 
2. 구현
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
def solution(s):
    answer = 1000
    if len(s)==1: return 1    
    
    for size in range(1, len(s)//2+1): # 압축 길이
        temp_s=s[:size]
        cnt=1
        result=""
        for i in range(size, len(s), size):
            if s[i:i+size]==temp_s:
                cnt+=1
            else:
                if cnt>1: result+=str(cnt)
                result+=temp_s
                temp_s=s[i:i+size]
                cnt=1
        if cnt>1: result+=str(cnt)
        result+=temp_s
        answer=min(answer, len(result))
    return answer
3. 결과
🤟 성공 🤟
4. 설명
- 압축 길이를 구한다
    
- for문을 1~len(s)//2+1까지 체크하면 된다.
 - 압축 길이가 s의 반 이상을 넘어가면 뒤에 문자열로는 압축시킬 수 없으므로 len(s)/2 이상은 체크하지 않아도 된다.
 
 - 조건에 맞게 문자열을 압축한다
    
- 문자열이 같으면 cnt++한다.
 - 다르다면, result에 현재 문자열을 넣는다. cnt는 cnt>1만 result에 넣는다.
 - 이제 다음 체크할 문자열을 temp_s에 넣는다. 현재 s[i]가 다른 문자이므로 i를 포함하고 size만큼 길이를 가진다.
 - cnt도 초기화.
 - 마지막 i가 temp_s와 같으면 result에 추가되지않고 for문을 종료하게 된다. 이 값을 넣어줘야 하므로 for문 밖에서 result에 다시 추가해준다.