[Programmers/프로그래머스] 2020 KAKAO BLIND RECRUITMENT [코딩테스트]
- [Lv. 2] 문자열 압축
- [Lv. 2] 괄호 변환
- [Lv. 3] 자물쇠와 열쇠
- [Lv. 4] 가사 검색
- [Lv. 3] 기둥과 보 설치
- [Lv. 3] 외벽 점검
- [Lv. 3] 블록 이동하기
def solution(s):
answer = len(s) # 압축할 수 없는 경우 = 주어진 문자열 길이
# 압축할 수 있는 경우 = 최대 압축 가능한 길이 = 주어진 문자열 절반
for step in range(1, len(s) // 2 + 1): # 1개 단위(step)부터 압축 단위를 늘려가며
count = 1 # 반복단어의 개수
compressed = '' # 압축한 단어결과
prev_word = s[:step] # 첫 번째 분할단어
for i in range(step, len(s), step): # 두 번째 분할단어부터 끝까지
if prev_word == s[i:i + step]: # 이전 분할단어가 현재 분할단어와 같으면
count += 1 # 반복단어 개수증가
else: # 이전 분할단어가 현재 분할단어와 다르면
# 압축단어결과 = 반복단어 if 반복횟수 < 2 else 반복횟수 + 반복단어
compressed += prev_word if count < 2 else str(count) + prev_word
prev_word = s[i:i + step] # 이전 분할단어 갱신
count = 1 # 반복단어 개수 초기화
# 남아있는 문자열에 대해서 처리
compressed += prev_word if count < 2 else str(count) + prev_word
answer = min(answer, len(compressed)) # 결과가 가장 짧은 것의 길이
return answer