[프로그래머스 파이썬(python)] 문자열 압축 카카오 2020 블라인드 테스트

DongGu·2021년 4월 1일
0

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

문제접근 방법

문제에서 주어진대로 생각했다.

  1. 주어진 문자열을 일정한 길이로 쪼개준다.
    new_zip에 일정한 길이로 쪼개진 문자열들을 더해준다.

  2. 쪼갠 문자열들을 비교하며 압축되는 정도를 체크한다.
    가장 먼저 비교해줄 것을 pop으로 꺼내고, 그 다음 것을 인덱스[0]으로 비교했다.

  3. 압축된 길이가 가장 짧은 것을 골라준다.
    total이라는 리스트에 길이를 비교하면서 짧은 것을 업데이트해줬다.

모든 반복문이 끝나면 total에는 가장 짧은 문자열이 들어있는데, 이것을 리턴해준다.

def solution(s):
    # 단위: scale
    total = list()
    # 단위 가능한 숫자 문자열이 한개 인 경우 len(s)//2 +1 하면 1돼서 런타임 에러 발생함
    for i in range(1, len(s)//2+2):
        scale = i
        new_zip = list()
        # 단위에 맞게 잘려진 문자열 더하기
        for j in range((len(s) // scale)+1):
            new_zip.append(s[j*scale:j*scale+scale])
    
        cnt_new_zip = ''
        
        temp = 1
        # 하나씩 비교하면서 압축가능한 문자열 체크하기
        while (new_zip):
            fst = new_zip.pop(0)
            if len(new_zip) == 0:
                cnt_new_zip += fst
            elif fst == new_zip[0]:
                temp += 1
            else:
                if temp == 1:
                    cnt_new_zip += fst
                else:
                    cnt_new_zip += str(temp) + fst
                temp = 1
        if len(total) == 0:
            total.append([i, cnt_new_zip])
        else:
            if len(total[0][1]) > len(cnt_new_zip):
                total[0] = [i, cnt_new_zip]

    return len(total[0][1])
profile
코딩하는 신방과생

0개의 댓글