티스토리 뷰

안녕하세요

프로그래머스 '문자열 압축' 문제 풀이입니다.

 

문제 링크입니다!

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

 

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

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

programmers.co.kr

● 문제 간단 설명

주어진 문자열에서 중복되는 문자열에 대해서 반복을 제거하고 반복하는 숫자만큼 앞에 숫자를 붙일 때,

가장 짧은 문자열의 길이를 반환하는 문제입니다.

 

● 문제 해결 방향

저는 단위 문자열을 하나씩 늘려가면서 중복된 값을 계산하여 압축 문자열의 길이를 구하고

그중 가장 짧은 문자열을 반환하는 방식으로 코드를 구성하였습니다.

 

● 문제 해결 코드

def solution(s):
    s_len = []
    for i in range(1, len(s)//2 + 2):
        s_list = [s[j : j + i] for j in range(0, len(s), i)]

        index = 0
        string = ''
        multi = 1
        while index < len(s_list) - 1:                
            if s_list[index] == s_list[index + 1]:
                s_list.remove(s_list[index])
                multi += 1
                  
            else :
                if multi > 1:
                    string += str(multi) + s_list[index]
                else :
                    string += s_list[index]
                index += 1
                multi = 1

        if multi > 1:
            string += str(multi) + s_list[-1]
        else :
            string += s_list[-1]
        s_len.append(len(string))
    answer = min(s_len)
    return answer

먼저 for 반복문에서 단위 문자열이 기준 문자열의 절반보다 길면 단위 문자열이 반복될 수 없기 때문에

절반 길이까지만 제한을 두었습니다.

 

이후 단위 문자열과 나머지 문자열을 비교해 연속적으로 반복되는 단위 문자열들을 제거하고

그 수에 맞추어 압축 문자열을 만들었습니다.

 

for 문을 한번 돌 때마다 만들어지는 압축 문자열을 리스트에 추가했고

마지막으로 min함수를 통해 가장 짧은 문자열의 길이를 반환했습니다.

 

일일이 하나씩 비교하는 방법이라 시간적인 측면에서 좋은 코드는 아니라는 생각이 듭니다.

항상 풀면서 더 좋은 풀이 방식으로 풀지 못하는 게 많이 아쉽네요 ㅠㅜ...

 

좋은 의견 있으면 댓글 부탁드립니다!

이상 문자열 압축 문제풀이였습니다!

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/01   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함