티스토리 뷰

 

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

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

programmers.co.kr

POINT

반복되는 변수 파악하기

k개로 문자를 자를 때, 앞의 문자(prev_str)와 뒤의 문자(curr_str)의 index 값이 어떻게 변하는가?

비교하려는 문자의 시작과 끝

예외 처리

  • 문자 길이가 1일 때는 정답이 1이다.

참고

  • 문자 길이를 초과하는 인덱스를 입력하면, 아무것도 나오지 않는다 (에러가 발생하진 않는다).
str = "aabbaccc"
print(str[8:9]) #

풀이

def solution(s):
    # (예외) 문자 길이가 1인 경우
    if (len(s) == 1): return 1

    answer = [] # 압축한 문자의 길이를 담은 배열
    
    for k in range(1, len(s)//2 + 1): # 전체 문자 길이의 반까지만 자르기
        new_str = "" # 압축 문자
        count = 1
        
        for i in range(0, len(s), k):
            prev_str = s[i : i+k]
            curr_str = s[i+k : i+2*k]
            if (prev_str == curr_str): count += 1
            else:
                if (count > 1):
                    new_str += (str(count) + prev_str)
                else: new_str += prev_str
                count = 1 # 초기화

        answer.append(len(new_str))
    
    return min(answer)
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/09   »
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
글 보관함