[프로그래머스 Lv2.]문자열 압축(python)

gayoung·2022년 4월 4일
0

알고리즘

목록 보기
12/50

1. 문제

문제 설명

제한사항

입출력

입출력 예시


2. 풀이 과정

내가 생각한 진행 과정

  • s = "aabbaccc"인 경우 압축하기
    • 1개: 2a2ba3c
    • 2개 이상: 압축불가
  • s = "ababcdcdababcdcd"인 경우 압축하기
    • 1개: X
    • 2개: "2ab2cd2ab2cd"
    • 8개: "2ababcdcd"
  • 압축은 단어갯수의 반까지만 진행해도 괜찮음
  • 1~단어갯수의 반까지 압축해보면서 front, back 비교하기
    • front는 단어의 처음부터 i개(back과 비교한 후 front=back으로 값 변경됨)
    • back은 압축문자 갯수만큼 띄어진 문자
  • front == back이라면 cnt += 1
  • front != back이라면 cnt == 1이면 문자를 최종 결과(answer)에 더하고, cnt != 1이면 str(cnt)랑 문자를 최종 결과(answer)에 더함
  • 여기서 끝나면, 마지막 값이 들어오지 못함
  • 마지막 값까지 알차게 넣어주고, 가장 짧은 압축 경우를 찾기 위해 기존의 mymin과 최종결과(answer) 길이 비교 진행

코드

def solution(s):
    mymin = 99999999999999999999999999
    answer = ''

    if len(s) == 1:
        return 1

    for i in range(1, len(s) // 2 + 1):
        cnt = 1
        front = s[:i]

        for j in range(i, len(s), i):  # 압축문자 갯수만큼 띄어진 다음칸을 봐야함
            back = s[j:j+i]
            if front == back:
                cnt += 1
            else:
                if cnt == 1:
                    answer += front
                else:
                    answer += str(cnt) + front

                front = back
                cnt = 1  # 새로 시작하기

        # 마지막 값 넣어야함
        if cnt == 1:
            answer += front
        else:
            answer += str(cnt) + front

        if mymin > len(answer):
            mymin = len(answer)

        answer = ''

    return mymin

0개의 댓글

관련 채용 정보