https://programmers.co.kr/learn/courses/30/lessons/60057
문제에서 주어진대로 생각했다.
주어진 문자열을 일정한 길이로 쪼개준다.
new_zip에 일정한 길이로 쪼개진 문자열들을 더해준다.
쪼갠 문자열들을 비교하며 압축되는 정도를 체크한다.
가장 먼저 비교해줄 것을 pop으로 꺼내고, 그 다음 것을 인덱스[0]으로 비교했다.
압축된 길이가 가장 짧은 것을 골라준다.
total이라는 리스트에 길이를 비교하면서 짧은 것을 업데이트해줬다.
모든 반복문이 끝나면 total에는 가장 짧은 문자열이 들어있는데, 이것을 리턴해준다.
def solution(s):
# 단위: scale
total = list()
# 단위 가능한 숫자 문자열이 한개 인 경우 len(s)//2 +1 하면 1돼서 런타임 에러 발생함
for i in range(1, len(s)//2+2):
scale = i
new_zip = list()
# 단위에 맞게 잘려진 문자열 더하기
for j in range((len(s) // scale)+1):
new_zip.append(s[j*scale:j*scale+scale])
cnt_new_zip = ''
temp = 1
# 하나씩 비교하면서 압축가능한 문자열 체크하기
while (new_zip):
fst = new_zip.pop(0)
if len(new_zip) == 0:
cnt_new_zip += fst
elif fst == new_zip[0]:
temp += 1
else:
if temp == 1:
cnt_new_zip += fst
else:
cnt_new_zip += str(temp) + fst
temp = 1
if len(total) == 0:
total.append([i, cnt_new_zip])
else:
if len(total[0][1]) > len(cnt_new_zip):
total[0] = [i, cnt_new_zip]
return len(total[0][1])