[Programmers/프로그래머스] 2020 KAKAO BLIND RECRUITMENT 문자열 압축 - Python/파이썬 [해설/풀이]

SihoonCho·2022년 9월 22일
0
post-thumbnail
[Programmers/프로그래머스] 2020 KAKAO BLIND RECRUITMENT [코딩테스트]
  1. [Lv. 2] 문자열 압축
  2. [Lv. 2] 괄호 변환
  3. [Lv. 3] 자물쇠와 열쇠
  4. [Lv. 4] 가사 검색
  5. [Lv. 3] 기둥과 보 설치
  6. [Lv. 3] 외벽 점검
  7. [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
profile
개발을 즐길 줄 아는 백엔드 개발자

0개의 댓글