티스토리 뷰

문제출처 - https://programmers.co.kr/learn/courses/30/lessons/60057

 

프로그래머스

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

programmers.co.kr

def solution(s):
    answer = s
    minLen = len(s)

    # 문자열을 1개~len(s)/2개씩 각 단위만큼 잘라서 압축
    for unit in range(1, len(s) // 2 + 1):
        tempAnswer = ""
        temp = s[:unit]
        cnt = 1
        for i in range(unit, len(s), unit):
            if temp == s[i:i+unit]:
                cnt += 1
            else:
                if cnt == 1:
                    tempAnswer += temp
                else:
                    tempAnswer += str(cnt) + temp
                cnt = 1
                temp = s[i:i+unit]

        # 마지막 문자 넣어주기
        if cnt == 1:
            tempAnswer += temp
        else:
            tempAnswer += str(cnt) + temp

        if len(tempAnswer) < minLen:
            answer = tempAnswer
            minLen = len(answer)

    return len(answer)

설명

 

문자열을 1개~len(s)/2개씩 각 단위만큼 잘라서 압축해본다.

 

압축한게 이전에 압축한거보다 짧으면 answer을 바꿔준다.

 

근데 2중 for문을 저렇게 돌리면 압축된 마지막 문자열이 tempAnswer에 포함이 안되기 때문에 따로 넣어줘야 한다. (이 코드를 좀 더 간결하게 할 수 있는 방법을 찾아봐야겠다.)

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/09   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
글 보관함