알고리즘/[Python] 프로그래머스

[Python/프로그래머스/2020 KAKAO BLIND RECRUITMENT] 문자열 압축

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

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

 

 


새로 알게 된 것

>>> s = "interesting"
>>> y = s[ : 1000]
 
>>> print(y)
"interesting"
cs

y = s[:1000] 처럼 문자열 슬라이싱 할 때 인덱스 에러가 일어날 것이라고 생각했었는데 그렇지 않았다.

 

 


Code

*주의 : 문자열(s)의 길이가 1인 경우를 간과했었는데, 아마 테스트 케이스 5번의 경우에 해당하는 것 같다.

문자열의 길이가 1인 경우, 바로 return 1을 하도록 변경해주었더니 통과했다.

def solution(s):
    n = len(s)//2
    minv = float('inf')
    # 문자열 s의 길이가 1인 경우 따로 예외 처리
    if len(s) == 1return 1
 
    for i in range(1, n+1):
        # 문자열을 i단위로 잘라서 리스트에 추가시키기 (+ 반복 횟수도)
        alist = []
        blist = []
        for j in range(0len(s), i):
            # alist가 빈 리스트가 아니라면
            if alist:
                if s[j:j+i] == alist[-1]:
                    blist[-1+= 1
                else:
                    alist.append(s[j:j+i])
                    blist.append(1)
            # 빈 리스트라면(처음에 한번)
            else:
                alist.append(s[j:j+i])
                blist.append(1)
 
        # alist와 blist를 합쳐서 문자열 길이를 알아보고 최소값을 업데이트한다.
        temp = sum(map(len, alist)) + sum(map(lambda y: len(str(y)), filter(lambda x: x>1, blist)))
        minv = min(minv, temp)
    return minv
cs