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

프로그래머스 문자열압축 python

by 지기_ 2021. 6. 12.
반응형

1. 문제

 

2. 풀이

단순구현

 

3. 구현

 

> TypeError: string indices must be integers

문제는tmpStr = s[0, int(step)] 이었다. string indice를 하려면 다음과 같이 적어야한다.

tmpStr = s[0:step]

def solution(s):
    answer = 0
    le = len(s)
    for step in range(1, le+1):
        cnt=0
        tmpStr = s[0, int(step)]
        for i in range(0, le+1, step):
            if tmpstr == s[i, i+int(step)]:
                cnt+=1
            else:
                if cnt==1:
                    answer+=tmpStr
                else:
                    answer+=cnt
                    answer+=tmpStr
                cnt=0
    return answer

 

두번째로,

cnt 숫자형을 string으로 바꿀 때 str(cnt) 하면 된다.

그리고 string끼리 더할 때st = st + new_st 형식을 맞춰줘야한다.

def solution(s):
    answer = 0
    le = len(s)
    result = ""
    for step in range(1, le+1):
        cnt=0
        tmpStr = s[0:step]
        for i in range(0, le+1, step):
            if s[i:i+int(step)]==tmpStr:
                cnt+=1
            else:
                if cnt==1:
                    result= result + tmpStr
                else:
                    result= result + str(cnt)
                    result= result + tmpStr
                cnt=0
    return answer

 

정답코드

def solution(s):
    answer = 10002
    le = len(s)
    result = ""
    
    if len(s)==1:
        return 1
    
    for step in range(1, le//2+1):
        cnt = 1
        tmpStr = s[0:step]
        for i in range(step, le, step):
            if s[i:i+step]==tmpStr:
                cnt+=1
            else:
                if cnt==1:
                    result= result + tmpStr
                else:
                    result= result + str(cnt)
                    result= result + tmpStr
                cnt=1
                tmpStr = s[i:i+step]
        if cnt==1:
            result = result + tmpStr
        else:
            result= result + str(cnt)
            result = result + tmpStr
        
        if len(result)<answer:
            answer = len(result)
        
        # print(result)
        
        result=""
    
    return answer
반응형

댓글