본문 바로가기
코딩/이코테-파이썬

문자열 압축

by 철없는민물장어 2022. 8. 28.
728x90
반응형

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

 

프로그래머스

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

programmers.co.kr


1글자씩 묶을 때, 2글자씩 묶을 때, . . . 각각을 다 계산해보고 가장 작은 값을 출력하도록 했다

내가 짠 코드는 실행이 안 돼서 결국 다른 코드를 참고했다

def solution(s):
    result=[]

    if len(s)==1:
        return 1
    
    for i in range(1, len(s)//2+1):
        b=''
        cnt=1
        tmp=s[:i] #시작부터i개만큼의 문자열

        for j in range(i, len(s), i): #i부터 끝까지 i개씩 뛰어넘음
            if tmp==s[j:i+j]: #비교해서 같은경우
                cnt+=1 #압축한 문자열 개수
            else: #비교해서 다른 경우
                if cnt!=1: #압축한 것이 1개 이상일 때
                    b=b+ str(cnt)+tmp #개수+문자열로 저장
                else: #압축한 것이 1개일 때
                    b=b+tmp #문자열만 저장
                tmp=s[j:j+i] #기준 문자열 변경
                cnt=1 #압축한 문자열 개수 1로 초기화
        #마지막 문자열을 더해주는 과정
        if cnt!=1:
            b=b+str(cnt)+tmp
        else:
            b=b+tmp
        
        result.append(len(b))
    return min(result)

s=input()
print(solution(s))

이 코드를 이해하려고 종이에 시작부터 끝까지의 모든 과정을 손으로 써가면서 이해함..;;

능지가 점점 떨어지는듯

728x90
반응형

댓글