https://school.programmers.co.kr/learn/courses/30/lessons/60057
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr

문자열을 앞쪽부터 n개 단위로 압축했을 때, 최소 문자열의 크기를 계산하는 문제입니다.
문자열의 최대 크기는 문자열의 크기만큼이기 때문에, 1부터 size까지 반복하여 n개 단위의 문자열과 그 뒤에 나오는 n개 단위의 문자열을 비교하며 몇 개의 문자열이 일치하는지 계산합니다.
따라서, cnt의 디폴트값은 1이며 1을 초과할 경우에만 숫자를 문자열에 포함합니다.
또한 다음 n개 단위의 문자열이 이전 n개 단위의 문자열과 일치하지 않을경우, 해당 부분의 문자열을 압축하여 result에 추가하고 cnt와 chr을 초기화합니다.
이 과정을 문자열의 크기를 초과할 때까지 반복하고, 문자열의 크기를 초과했을 때 현재까지 남은 압축된 내용을 result에 모두 추가합니다.
def solution(s):
size = len(s)
answer = size
for num in range(1, size + 1):
result = ''
cnt = 1
start = 0
chr = s[start:start + num]
while True:
start = start + num
if start >= size:
if cnt != 1:
result += str(cnt) + chr
else:
result += chr
break
if chr == s[start:start + num]:
cnt += 1
else:
if cnt != 1:
result += str(cnt) + chr
else:
result += chr
cnt = 1
chr = s[start:start + num]
if len(result) < answer:
answer = len(result)
return answer