[프로그래머스] 문자열 압축(Python)

박현우·2021년 5월 25일
0

프로그래머스

목록 보기
29/34

문제

문자열 압축


문제 해설

주어진 문자열을 인덱스 0부터 시작해 반복되는 문자열이 존재하면 압축하는 문제입니다.

문자열을 한 칸씩, 두 칸씩, ... N 칸씩 검사하면 되는데, 굳이 N까지 검사하지 않아도 N / 2까지만 검사하면 그 뒤는 어차피 압축되지 않기 때문에 검사할 필요가 없습니다.

  1. 문자열 전체를 1, 2, ... N//2 칸으로 나눠 검사합니다.
  2. 최종 문자열, 비교 문자열, 횟수를 저장하는 변수를 설정합니다.
  3. 현재 슬라이싱된 문자열과 비교 문자열을 비교합니다.
  4. 같다면 횟수를 올려주고 다르다면 횟수 초기화, 최종 문자열에 비교 문자열과 횟수를 합쳐서 넣어주고 비교 문자열을 현재 슬라이싱된 문자열로 갱신합니다.

그 뒤 가장 작은 문자열의 길이를 리턴하면 됩니다.


풀이 코드

def solution(s):
    answer = len(s)
    for length in range(1, len(s) // 2 + 1):
        string = priv = ""
        cnt = 0
        for i in range(0, len(s), length):
            # priv와 비교 후 같으면 cnt += 1
            if s[i : i + length] == priv:
                cnt += 1
            else:
                # 다르면 cnt 초기화, cnt,priv를 string에 더해줌
                string += str(cnt) + priv if cnt > 1 else priv
                cnt = 1
                priv = s[i : i + length]
        string += str(cnt) + priv if cnt > 1 else priv
        answer = min(answer, len(string))
    return answer

0개의 댓글