티스토리 뷰

728x90
반응형

문제

https://programmers.co.kr/learn/courses/30/lessons/60057?language=python3 

 

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

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

programmers.co.kr

 

코드

def solution(s):
    answer = 99999999
    for i in range(1, len(s)//2 + 1):
        ret = ""
        count = 1
        prev = s[:i]
        for j in range(i, len(s)+i, i):
            if prev == s[j:j+i]:
                count += 1
            else:
                if count != 1:
                    ret = ret + str(count) + prev
                else:
                    ret = ret + prev
                prev = s[j:j+i]
                count = 1
        answer = min(answer, len(ret))
    return min(answer, len(s))

문자열을 압축하기 위해서 1일때부터 문자열 전체를 검사할 필요없이 전체 문자열에 길이에 반까지만 검사하면 되어서 len(s)//2 + 1을 사용해준다.

 

2번째 for문은 i가 2일 때 2씩증가하여 계속 비교를 하는 for문이다. range(i, len(s)+i, i)에서 len(s)에 +i를 안해주면 맨마지막 값을 비교못해준다.

 

prev에 이전 값을 넣어주고 prev == s[j:j+1]이 같다면 count += 1 해주고 다를때는 count가 1이라면 count는 더해주지 않고 1이 아니라면 count도 더해준다.

 

그리고 prev에 값을 바꿔주고 count도 1로 초기화 시켜준다. answer에는 가장 작은 값을 넣어준다.

원래 문자열 보다 작다면 그 값을 리턴해준다.

반응형
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
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