[프로그래머스 코딩테스트]문자열압축
[프로그래머스 코딩테스트 고득점 kit] 문자열압축 (Python)
문제 링크
https://programmers.co.kr/learn/courses/30/lessons/60057
문제풀이
def solution(s):
if len(s) == 1:
return 1
result = ""
length = []
cut = 1
for i in range(1,len(s)//2+1):
cnt = 1
temp_str = s[:i]
for j in range(i,len(s),i):
if temp_str == s[j:j+i]:
cnt += 1
else:
if cnt == 1:
cnt = ""
result += str(cnt) + temp_str
cnt = 1
temp_str = s[j:j+i]
if cnt == 1:
cnt = ""
result += str(cnt) + temp_str
length.append(len(result))
result = ""
#print(length)
return min(length)
#모범답안... 카카오에 나왔던 문제답게 이건 너무어렵다
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))
댓글남기기