https://school.programmers.co.kr/learn/courses/30/lessons/60057
(count - 1) * (문자열길이)
값을 빼주는 식으로 코드 진행 가능def slicing(s, k):
i = 0
sliced = []
while i < len(s):
ss = ''.join(s[i:i+k])
sliced.append(ss)
i += k
return sliced
def calc(i, arr):
res = ''
cnt = 1
while i < len(arr):
if arr[i] == arr[i-1]:
cnt += 1
else:
count = '' if cnt==1 else str(cnt)
res += count + arr[i-1]
cnt = 1
i += 1
count = '' if cnt==1 else str(cnt)
res += count + arr[-1]
#10 이상인 경우...
return len(res)
def solution(s):
s = list(s)
answer = len(s)
for i in range(len(s)):
arr = slicing(s, i+1)
str_len = calc(1, arr)
if str_len < answer:
answer = str_len
return answer
def compress(text, tok_len):
words = [text[i:i+tok_len] for i in range(0, len(text), tok_len)]
res = []
cur_word = words[0]
cur_cnt = 1
for a, b in zip(words, words[1:] + ['']):
if a == b:
cur_cnt += 1
else:
res.append([cur_word, cur_cnt])
cur_word = b
cur_cnt = 1
return sum(len(word) + (len(str(cnt)) if cnt > 1 else 0) for word, cnt in res)
def solution(text):
return min(compress(text, tok_len) for tok_len in list(range(1, int(len(text)/2) + 1)) + [len(text)])
a = [
"aabbaccc",
"ababcdcdababcdcd",
"abcabcdede",
"abcabcabcabcdededededede",
"xababcdcdababcdcd",
'aaaaaa',
]
for x in a:
print(solution(x))