[프로그래머스 lv2] 문자열 압축 Python

DH·2022년 4월 10일
0

coding test

목록 보기
5/10

간격을 1씩 증가시키며 모든 경우의 수의 문자열 길이를 검사했다.
좋은 코드같진 않지만 슬라이싱 할 때 주의점을 배울 수 있어서 좋았던 문제였다.

소스코드:

def solution(s):

    answer=len(s)
    if answer==1:
        return 1
    options=[]
    for interval in range(1,(len(s)//2)+1):
        p=process(s,interval)
        if p<=answer:
            answer=p
    
    return answer

def process(s,interval):
    list=[]
    for i in range(0,len(s),interval):
        list.append(s[i:i+interval])
    
    
    return len(shrink(list))

def shrink(list):
    shrinked=[list.pop(0)]
    count=1
    while list:
        word=list.pop(0)
        
        if word==shrinked[-1]: 
            count+=1
            if [word]!=list[0:1]: 
                shrinked[-1]=str(count)+shrinked[-1]        
        else:
            count=1
            shrinked.append(word)
    
    return "".join(shrinked)

슬라이싱 주의해야할 점: 아래처럼 슬라이싱한 부분과 원소를 비교할때 슬라이싱한 결과는 리스트로 반환됨을 항상 기억하고 있어야한다. 따라서 밑에 1번같은 경우에 비교문은 항상 False를 반환한다. (타입이 다르므로)

1번

if word!=list[0:1]: 
   	shrinked[-1]=str(count)+shrinked[-1]  


2번

if [word]!=list[0:1]: 
    shrinked[-1]=str(count)+shrinked[-1]  

사실 그렇게 좋은 해결책같진 않다. 슬라이싱 없이 원소접근을 하면 인덱스에러가 나는데 여러모로 경계조건 같은것을 신경쓰기 귀찮아서 그냥 word를 리스트로 만들어버렸다. 아무쪼록 해결이 되긴 한다.

profile
Person

0개의 댓글