💻 링크
https://school.programmers.co.kr/learn/courses/30/lessons/60057
📖 문제 해결
문자열 s의 길이가 n이라 하면, 1부터 n/2까지의 길이에 대해 문제에서 제시한 압축 변환 방법을 모두 적용해 본 후 압축하여 표현한 문자열 중 가장 짧은 것의 길이를 return 하도록 하는 완전 탐색 알고리즘을 사용하여 문제를 해결하였습니다. (n/2를 넘어가는 길이 단위로는 압축이 되지 않기 때문에 n/2까지의 길이에 대해서만 압축 변환을 하도록 하였습니다.)
def solution(s):
# 길이가 1인 경우는 바로 1을 반환
if len(s) == 1:
return 1
# 문자열을 압축한 결과를 담을 리스트
result_list = []
for n in range(1,len(s)//2 + 1):
result = ''
temp = []
count = 1
i = 0
j = 1
# 문자열을 n개 단위로 잘라서 리스트에 넣기
while n * i <= (len(s)-1):
temp.append(s[n*i:n*j])
i += 1
j += 1
# 자른 문자열을 문제에서 제시한 대로 압축하여 표현하기
for idx, string_ in enumerate(temp):
if idx+1 <= (len(temp)-1) and temp[idx] == temp[idx+1]:
count += 1
continue
if count >= 2:
result += str(count)
result += temp[idx]
count = 1
else:
result += temp[idx]
result_list.append(len(result))
# 압축하여 표현한 문자열 중 가장 짧은 것의 길이를 return
return min(result_list)