나의 개발일지

[프로그래머스] Lv.2 문자열 압축 [Python, 파이썬] KAKAO 본문

프로그래머스

[프로그래머스] Lv.2 문자열 압축 [Python, 파이썬] KAKAO

YoonJuHan 2023. 10. 14. 16:04
  • 문제 : https://school.programmers.co.kr/learn/courses/30/lessons/60057
  • 🔑 문자열을 자르고 현재, 현재+1을 비교하기
    • 현재, 현재+1 이 같은 동안에는 개수만 증가
    • 다른 문자가 나오면 그동안 누적한 개수 + 문자를 변수에 연결시키기
    • 개수가 1이라면 문자만 변수에 연결
      • 처음에는 1도 같이 연결시키고 마지막에 replace로 1을 없애주었다.
      • 이 경우 10, 11.. 같은 개수가 있을 때 1을 없애버려서 실패, 그래서 조건문에서 걸러주었다.

 

def solution(s):
    answer = 987654321
    
    for i in range(1, len(s) + 1):
        slice = []                          # n개 단위로 자른 문자열 리스트
        compress = ""                       # 압축한 문자열 담을 변수
        
        for j in range(0, len(s), i):
            slice.append(s[j:j+i])          # 잘라서 리스트에 추가
            
        cnt = 1                             # 기본 개수 1개
        for k in range(len(slice)-1):
            if slice[k] == slice[k+1]:      # 현재, 현재+1 이 같은 문자면
                cnt += 1                    # 개수 +1
            else:                           # 다르면
                if cnt == 1:                
                    compress += slice[k]    # 1은 생략하고 연결
                else:
                    compress += str(cnt) + slice[k]  # "누적한 개수" + "문자" 를 변수에 계속 연결
                    cnt = 1                          # 개수 1로 초기화
                    
        if cnt == 1:                                 # 마지막 남아있는 문자 처리
            compress += slice[-1]                               
        else:
            compress += str(cnt) + slice[-1]
            
        answer = min(answer, len(compress))          # 길이가 짧으면 정답 업데이트
    
    return answer
Comments