STUDY/Algorithm

[프로그래머스] LEVEL2 문자열 압축, python

sinawi95 2021. 4. 4. 21:13
728x90

programmers.co.kr/learn/courses/30/lessons/60057#

 

코딩테스트 연습 - 문자열 압축

데이터 처리 전문가가 되고 싶은 "어피치"는 문자열을 압축하는 방법에 대해 공부를 하고 있습니다. 최근에 대량의 데이터 처리를 위한 간단한 비손실 압축 방법에 대해 공부를 하고 있는데, 문

programmers.co.kr

def solution(s):
    len_s = len(s)
    answer = len_s
    if len_s == 1:
        return answer
    cnt = 1
    while cnt < len_s //2 + 1: 
        i = 0
        zip_val = 0
        zip_string = ''
        while i < len_s:
            tmp_s = s[i:i + cnt]
            if tmp_s == s[i + cnt:i + 2 * cnt]:
                zip_val += 1
            else:
                if zip_val:
                    zip_string += str(zip_val+1) + tmp_s
                else:
                    zip_string += tmp_s
                zip_val = 0
            i += cnt
        else:
            zip_string += s[i+cnt:]
        cnt += 1
        if len(zip_string) < answer:
            answer = len(zip_string)
    return answer

1부터 문자열 길이의 반까지 while문으로 돌리면서 모든 문자열을 슬라이싱하여 중복되는지 확인하였다.

문자열이 중복되면 zip_val를 하나 증가시키고 다음 문자열을 비교한다.

중복되지 않으면 zip_val 값에 따라 다른 문자열을 zip_string에 저장한다.

끝까지 확인하였을때(else를 통해) 마지막 남은 부분도 zip_string에 저장한다.

그때 zip_string의 길이를 확인하여 값이 작으면 answer를 갱신한다.


이문제도 C로 풀어보려했으나 C++만 지원해서 풀지 않았다.