본문 바로가기
Python3/프로그래머스

2022.06.04 [프로그래머스] (python 파이썬) 문자열 압축

by ian's coding 2022. 6. 4.
728x90
반응형

 

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

 

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

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

programmers.co.kr

 


풀이

먼저 answer값을 문자열의 최대길이로 설정하고 s의 길이가 1이면 바로 1리턴하기

 

1. i개로 문자열 압축하기

2. 처음 i개의 문자열 a에 저장하기(다음 문자열과 비교하기 위해)

3. i부터 len(s)-1까지 i개로 늘어나는 for문을 돌려 다음 i개의 문자열과 이전 문자열 비교하기

4. 만약 이전 값과 같으면 cnt+=1

5. 이전 값과 다르고 cnt가 1이면 이전 문자열만 temp에 추가하기

6. 이전 값과 다르고 cnt가 1이 아니면 cnt와 a를 temp에 추가( 여기서 cnt는 문자열로 변환후 추가하기)

7. 자르고 남은 부분 처리하기

 

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
def solution(s):
    # 문자열 최대길이를 초기값으로 설정
    answer =  1000
    
    # s의 길이가 1이면 최소길이가 1이기 때문에 1을 리턴
    if len(s)==1:
        return 1
    # 1개부터 s길이의 절반까지 압축하며 확인
    for i in range(1,len(s)//2+1):
        temp=''
        cnt=1
        a=s[:i] # 초기 비교값 설정
        for j in range(i,len(s),i):
            if s[j:j+i]==a:
                cnt+=1
            else:
                if cnt==1:
                    temp+=a
                else:
                    temp+=str(cnt)+a
                a=s[j:i+j]
                cnt=1
        # 남아있는 문자열 처리하기
        if cnt==1:
            temp+=a
        else:
            temp+=str(cnt)+a
        answer=min(answer, len(temp))
    return answer
cs

 

 

 

728x90
반응형

댓글