[ 프로그래머스 / PYTHON ] 문자열 압축

yujeongkwon·2022년 6월 26일
0

프로그래머스 / PYTHON

목록 보기
30/77

문제 설명

문자열 압축

압축할 문자열 s가 매개변수로 주어질 때, 위에 설명한 방법으로 1개 이상 단위로 문자열을 잘라 압축하여 표현한 문자열 중 가장 짧은 것의 길이를 return 하도록 solution 함수를 완성해주세요.

[입출력 예]

sresult
"aabbaccc"7
"ababcdcdababcdcd"9
"abcabcdede"8
"abcabcabcabcdededededede"14
"xababcdcdababcdcd"17

코드 설명

  1. s의 길이만큼 for문
    for문 돌때마다 sliceN(= 얼만큼씩 압축, 자를 것인가) 1씩 추가
    변수 초기화
    2. repeat이 2가 아닐때 까지 while문 ( repeat은 단순히 len(temp)가 0이 되도 while문을 한번 더 실행시키고 멈추기 위해 (원래는 len(temp) > 0 였는데 이러면 한번 더 실행해야함)
    3. s를 sliceN 만큼 자르고 잘린부분은 temp에 저장
    4. if before이 없다면 = 처음이라면 before 설정
    elif before == slice_ 이면 =압축이 된다면 = 앞과 같다면 count +=1
    else 다르다면 = 압축이 안된다면 현재까지 압축된값 count +1과 압축기준= before 을 answer에 추가
    그 후 변수 초기화
    5. 만약 len(temp) == 0이라면 while문 한번 더 실행 후 break
    1. 이전 압축기준의 길이= sliceN단위와 비교하여 저 작은값을 answer에 저장
  2. return answer

코드

def solution(s):
    sliceN = 0
    min_ = 1000
    for i in range(len(s)):
        sliceN += 1
        temp = s
        before = ''
        count = 0
        answer = ''
        repeat = 0
        while repeat != 2:
            slice_ = temp[:sliceN]
            temp = temp[sliceN:]
            if before =='':
                before = slice_
            elif  before == slice_:
                count+= 1
            else:
                if count == 0:    answer += before
                else:   answer += str(count+1)+before
                before = slice_
                count = 0
            if len(temp) == 0: repeat +=1
        if min_ > len(answer):  min_ = len(answer)
    return min_
profile
인생 살자.

0개의 댓글