티스토리 뷰

728x90

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

 

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

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

programmers.co.kr

 

  • 풀이 :

주어진 문자열을 조건에 맞게 압축하여 가장 짧게 압축할 수 있는 길이를 출력하면 된다.

 

 

 

  • 해설 :

직관적으로 접근하면 쉽게 해결할 수 있는 문제이다. 문자열 s의 절반만큼의 길이만큼 잘라주며 반복되는 구간이 나온다면 합쳐주면 된다. 어려웠던 부분은 중복되는 부분이 없거나 (구간반복 cnt가 1일떄) 문자열의 끝까지 반복할때 예외처리 하는것이 까다로웠다.

 

 

 

 

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
32
 
def summarize(s):
    l = len(s)
    if l == 1:
        return 1
    ans = 1001
    for i in range(1,l//2+1):
        answer = ''
        cnt = 1
        for m in range(i,l,i):
            prev = s[m-i:m]
            curr = s[m:m+i]
            if prev == curr:
                cnt += 1
            else:
                if cnt == 1:
                    answer += prev
                else:
                    answer += str(cnt) + prev
                cnt = 1
        if cnt == 1:
            answer += curr
        else:
            answer += str(cnt) + curr
        if ans > len(answer):
            ans = len(answer)
    return ans
 
                
def solution(s):
    answer = 0
    return summarize(s)
cs
320x100
댓글
© 2022 WonSeok, All rights reserved