def solution2(s, cnt):
str_list = []
result_str = ''
tmp = 1
for p in range(0, len(s) + 1, cnt):
start, end, end2 = p, p + cnt, cnt + (p + cnt)
if s[start:end] == s[end:end2]:
tmp += 1
else:
str_list.append([s[start:end], tmp])
tmp = 1
return ''.join([i[0] if i[1] == 1 else (str(i[1]) + i[0]) for i in str_list])
def solution(s):
if len(s) == 1:
return 1
max_len = len(s) // 2
return len(min([(solution2(s, x)) for x in range(1, max_len + 1)], key=len))
a = ["aabbaccc", "ababcdcdababcdcd", "abcabcdede", "abcabcabcabcdededededede", \
"xababcdcdababcdcd", "a"]
for i in a:
print(solution(i))
코드를 보면 가독성이 떨어진다
처음에는 이런 형식이 아니였지만 완성 후 자체적으로 comprehension을 최대한 활용해보고
싶어서 열심히 줄여봤다.
level2 라서 간단할 줄 알았지만 생각보다 애먹고 result_str 부분은 정답을 보고 참고하였다.
def solution2(s, cnt):
str_list = []
result_str = ''
tmp = 1
for p in range(0, len(s) + 1, cnt):
start, end, end2 = p, p + cnt, cnt + (p + cnt)
if s[start:end] == s[end:end2]:
tmp += 1
else:
str_list.append([s[start:end], tmp])
tmp = 1
return ''.join([i[0] if i[1] == 1 else (str(i[1]) + i[0]) for i in str_list])
def solution(s):
if len(s) == 1:
return 1
max_len = len(s) // 2
return len(min([(solution2(s, x)) for x in range(1, max_len + 1)], key=len))
max_len = len(s) // 2
시작은 문제에 나와있듯 앞 첫 글자부터 시작한다
2개 단위의 글자 압축부터 시작하기 때문에 위와같이 max_len 값을 전체 길이의 2로 나누어 주었다.
return 부분
for x in range(1, max_len + 1)
result.append(olution2(s, x))
len(min(result, key=len))
-> listcomprehension
return len(min([solution2(s, x) for x in range(1, max_len + 1)], key=len)
풀어 쓰면 위와 같다
solution2 는 cnt에 2 ~ (len(s) // 2 + 1) 까지의 숫자를 1씩 늘리며 얼마나 어디까지 압축되는지의 코드이다.