https://school.programmers.co.kr/learn/courses/30/lessons/60057
def solution(s):
answer = len(s)
for i in range(1, len(s)//2 + 1): # 1부터 문자열 길이의 절반까지 반복
l = make_list(s, i) # 문자열 s를 i 길이만큼 잘라서 리스트 l 생성
result = make_shorteds(l) # 생성된 리스트 l을 기반으로 문자열 압축 시도
if len(result) < answer:
answer = len(result)
return answer
def make_list(s, length):
l = [] # 분할된 문자열을 저장할 리스트 생성
for i in range(0, len(s), length): # 0부터 문자열 길이까지 length 간격으로 반복
l.append(s[i:i+length]) # 문자열을 length만큼 잘라서 리스트에 추가
return l
def make_shorteds(l):
cnt = 1 # 연속된 문자열의 개수 카운터
result = '' # 최종 압축 문자열을 저장할 변수
for i in range(1, len(l)):
if l[i-1] == l[i]: # 이전 요소와 현재 요소가 같은 경우
cnt += 1 # 카운터 증가
else: # 이전 요소와 현재 요소가 다른 경우
if cnt >= 2: # 카운터가 2 이상인 경우(압축 가능)
result += str(cnt) + l[i-1] # 카운터와 이전 요소를 결과 문자열에 추가
else: # 카운터가 1인 경우(압축 불가)
result += l[i-1] # 이전 요소만 결과 문자열에 추가
cnt = 1 # 카운터 초기화
# 마지막 요소 처리(반복문 종료 후 남은 요소 처리)
result += str(cnt) + l[len(l)-1] if cnt >= 2 else l[len(l)-1] # 마지막 요소를 결과 문자열에 추가
return result # 압축된 문자열 반환