[프로그래머스/카카오 60057] 문자열 압축 (Python)
문제 링크 #
개요 #
- 문자열 처리 능력이 요구되는 문제다.
문제 조건 #
- 문자열에서 반복되는 문자 또는 단어를 압축하고 가장 짧게 압축된 길이를 반환한다.
문제 해설 #
- 문자열을 단일 문자부터 2등분이 될 때까지 한 단위씩 늘려가면서 분리된 문자들에 대한 압축 과정을 진행한다.
- 분리된 문자들을 순회하면서 반복되는 문자열을 무시하고 남은 문자열의 길이를 세는 방법도 있지만,
여기선 문자열을 형식에 맞게 압축시키고 그 길이를 구한다. - 이전 문자열이 담길 메모리와 해당 문자열이 반복된 횟수를 기록하는 변수를 각각 선언한다.
- 분리된 문자들을 순회하면서 현재 문자와 메모리가 다르면(반복되지 않으면)
압축된 문자열에 메모리를 추가하고 초기화한다. - 모든 과정에 대한 최소 길이 값을 기록하고 반환한다.
해설 코드 #
python
def solution(s):
answer = len(s)
for unit in range(1,len(s)//2+1):
s_range = list(range(0, len(s), unit))+[None]
s_split = [s[s_range[i]:s_range[i+1]] for i in range(len(s_range)-1)]+['']
new_s, memory, cnt = str(), s_split[0], 1
for s_unit in s_split[1:]:
if memory != s_unit:
new_s += ((str(cnt) if cnt > 1 else str()) + memory)
memory, cnt = s_unit, 1
else:
cnt += 1
answer = min(answer, len(new_s))
return answer