
def solution(s):
# 길이가 1이면, 볼거 없이 1이다.
if len(s) == 1:
return 1
# 문자열 자를 길이를 반복문으로 늘려나가면서 전체를 탐색하게 한다.
result= []
for step in range(1, len(s)+1): # 간격은 1부터
# 그 안에서, 첫번째를 우선 슬라이스 해놓고, step을 간격으로
# for j range(step, 전체길이 + step, step) 스텝만큼 잘라서 앞에 잘라 놓은 것과 비교한다.
string = '' # 압축 문자열 모을 것
prev = s[:step] # 첫번째 스텝
cnt = 1 # 기본 prev가 1이니까
for j in range(step, len(s)+step, step): # step 0 이면 에러
# step 부터 , 길이 + 스텝, 스텝 간격, 걱정말라,
# s문자열 리스트 슬라이싱할때, 벗어나도, 에러 안난다. (인덱스는 에러남)
if prev == s[j:j+step]:
cnt += 1 # 앞의 스텝과 같다면, cnt를 올린다.
else : # 앞의 스텝에 해당하는 문자열과 다르면,
if cnt != 1:
# 앞에 잘라놓은 문자열이 반복 된 것이니까,
# 모으는 문자열 + str (숫자) + 잘라놓은 문자열을 더한다.
string = string + str(cnt) + prev # 지금까지 반복된 문자열 압축하여 문자열 저장
else : # 반복이 1이면,
string = string + prev # 모으는 문자열 + 잘라놓은 문자열
prev = s[j:j+step]
cnt = 1
result.append(len(string)) # 압축된 문자열 길이 모으기
# 가장 바깥 반복문이 하나씩 실행되면 문자열이 만들어 진것이니까,
# len으로 길이를 구해서 문자열의 길이를 하나씩 append로 저장한다.
return min(result) # min 저장된 문자열로, 최소값을 출력한다.