취준생의 코딩테스트 연습기

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

코딩테스트/프로그래머스

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

Jiwon_C 2021. 5. 22. 14:18

# 문제 링크

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

 

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

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

programmers.co.kr

# Soultion

2차원 리스트를 이용하여 마지막에 저장된 문자열과 같으면, 카운팅을 증가해주는 방식으로 해결했다.

주의할점은, 카운팅의 개수가 10개이상일때 18번 라인처럼 처리해줘야한다는 점이다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
def solution(s):
    answer = 0
    cnt = len(s)
    for i in range(1,len(s)//2+1):
        li = []
        for j in range(0,len(s),i):
            if not li:
                li.append([s[j:j+i],1])
            else:
                if li[-1][0]!=s[j:j+i]:
                    li.append([s[j:j+i],1])
                else:
                    li[-1][1+=1
                    
        chk = 0
        for k in li:
            if k[1]!=1:
                chk+=len(str(k[1]))
                # chk+=1
            chk+=len(k[0])
        cnt = min(cnt,chk)
        
    return cnt
cs

3. 최소값을 저장해주기 위한 변수

4. 몇개의 문자열로 압축을 할 것인지에 대한 for문. 문자열의 길이가 8이면 4까지만 확인하면 된다.

6. i개의 문자열만큼씩 압축하므로 인덱스를 확인하기 위한 for문

7. 스택이 비었으면 삽입해준다.

12. 마지막에 들어있는 스택의 문자열과 같다면 카운팅 증가

15~21. 최소 문자열을 구하기 위한 코드

Comments