주어진 문자열을 인덱스 0
부터 시작해 반복되는 문자열이 존재하면 압축하는 문제입니다.
문자열을 한 칸씩, 두 칸씩, ... N 칸씩 검사하면 되는데, 굳이 N까지 검사하지 않아도 N / 2
까지만 검사하면 그 뒤는 어차피 압축되지 않기 때문에 검사할 필요가 없습니다.
1, 2, ... N//2
칸으로 나눠 검사합니다.그 뒤 가장 작은 문자열의 길이를 리턴하면 됩니다.
def solution(s):
answer = len(s)
for length in range(1, len(s) // 2 + 1):
string = priv = ""
cnt = 0
for i in range(0, len(s), length):
# priv와 비교 후 같으면 cnt += 1
if s[i : i + length] == priv:
cnt += 1
else:
# 다르면 cnt 초기화, cnt,priv를 string에 더해줌
string += str(cnt) + priv if cnt > 1 else priv
cnt = 1
priv = s[i : i + length]
string += str(cnt) + priv if cnt > 1 else priv
answer = min(answer, len(string))
return answer