본문 바로가기

Problem Solving/programmers

[programmers] Level 2 문자열 압축.py

728x90
반응형

프로그래머스 Level 2 문자열 압축을 파이썬을 통해 풀어보았다. 

 

https://programmers.co.kr/learn/courses/30/lessons/60057

 

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

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

programmers.co.kr

문자열 압축.py

 

tomy9729/Algorithm

🐗 내가 직접 작성한 내 코드 🐗. Contribute to tomy9729/Algorithm development by creating an account on GitHub.

github.com



Level 2 - 문자열 압축

n 단위로 압축한 문자열의 길이 중 가장 짧은 길이를 찾는 것이 목표이다. 가장 짧은 문자열을 찾기 위해서는 1부터 모든 단위로 문자열을 압축하여 비교해야 한다. 

 

n 단위로 압축한 문자열의 길이를 구하는 compact(n) 함수를 구현하는 게 문제의 목표다. 문자열 s를 문자열로 변환한 s_에 대해서 n만큼 잘라내고 압축이 가능한지 비교한다. 만약 잘라낸 s_이 n보다 작다면 그대로 문자열에 붙이면 된다. 압축이 가능하다면 가능한 만큼 num에 표시한다. 만약 num의 크기가 1이라면 압축이 불가하므로 그대로 문자열에 붙이고 num이 1보다 크다면 압축이 가능하므로 num과 잘라낸 문자열을 붙인다.

 

compact(n)을 1부터 수행하여 가장 짧은 압축 문자열의 길이를 구한다.

#Level 2 문자열 압축.py
def solution(s):
    answer = 0
    def compact(n) : 
        s_ = list(s)
        result = ""
        while s_ : 
            num = 1
            if len(s_) > n :
                temp = s_[:n]
                s_ = s_[n:]
            else : 
                temp = s_
                s_ = []
            while temp == s_[:n] : 
                num += 1
                s_ = s_[n:]
            if num == 1 : 
                result += "".join(temp)
            else : 
                result += str(num) + "".join(temp)
        return len(result)
    
    answer = compact(1)
    for i in range(2,len(s)+1) : 
        temp = compact(i)
        if answer > temp : 
            answer = temp
    return answer
728x90
반응형