• Home
  • About
    • on Weekend photo

      on Weekend

      𝙎𝙩𝙪𝙙𝙮𝙞𝙣𝙜

    • Learn More
    • Instagram
    • Github
  • Archive
    • All Posts
    • All Tags
    • All Categories
  • Categories
    • Problem Solving
    • TIL
    • Study
    • Etc
    • 필사
  • Projects

[프로그래머스] 2020 KAKAO BLIND RECRUITMENT 문자열 압축

31 Mar 2021

문제

단위에 따라 문자열을 압축하되, 가장 짧은 문자열의 길이를 출력해야 합니다.

저는 우선 메소드 분리 없이 코드를 작성한 후, 시간이 조금 남아 함수 리팩토링을 해주었습니다.

단계

  1. step 단위로 문자열을 자르며 압축 가능 여부 확인
    1. step 단위로 잘린 직전 문자열과 현재 문자열이 같으면 중복 카운트 증가
    2. 같지 않을 경우, 최종 문자열 업데이트
  2. 가장 맨 마지막 문자열은 업데이트되지 않으므로, 루프를 빠져나간 후 한 번 더 체크해줍니다.

  3. 만들어진 문자열의 길이와, 이전까지의 길이 최소값 중 더 작은 값을 보관

코드

# 문자열 중복 여부에 따라 madeString(최종문자열)을 업데이트해주는 함수
def makeString(overlapCount, madeString, postString) :
     # 중복이 있다면, overlapCount를 함께 업데이트
    if overlapCount != 1 :
        madeString += (str(overlapCount)+postString)
    else :
        madeString += postString
        
    return madeString

def solution(s):
    answer = 0
    length = minL = len(s)

    for step in range(1, length+1) :
        madeString, postString, overlapCount = '', '', 1
        
        # step 단위로 문자열을 자르며 압축 가능여부 확인
        for c in range(0, length, step) :
            tempString = s[c:c+step]
            
            # 직전 문자열과 현재 문자열이 같으면 중복카운트 증가
            if postString == tempString :
                overlapCount += 1
            else : # 아닐 경우, 최종문자열 업데이트
                madeString = makeString(overlapCount, madeString, postString)
                overlapCount, postString = 1, tempString # 초기화 작업
            
            if len(madeString) >= minL : break
                
        # 마지막 문자열은 체크하지 못하고 빠져나오므로 마지막 문자열 확인
        madeString = makeString(overlapCount, madeString, postString)
        minL = min(minL, len(madeString)) # 최소 길이 계산
            
    return minL




problem_solvingpython Share Tweet +1