[프로그래머스]60057번 문자열 압축

Effy_ee·2024년 4월 19일
0

코딩테스트

목록 보기
94/118

https://school.programmers.co.kr/learn/courses/30/lessons/60057

def solution(s):
    answer = len(s)  
    for i in range(1, len(s)//2 + 1):  # 1부터 문자열 길이의 절반까지 반복
        l = make_list(s, i)  # 문자열 s를 i 길이만큼 잘라서 리스트 l 생성
        result = make_shorteds(l)  # 생성된 리스트 l을 기반으로 문자열 압축 시도
        if len(result) < answer:  
            answer = len(result)  
    
    return answer  

def make_list(s, length):
    l = []  # 분할된 문자열을 저장할 리스트 생성
    for i in range(0, len(s), length):  # 0부터 문자열 길이까지 length 간격으로 반복
        l.append(s[i:i+length])  # 문자열을 length만큼 잘라서 리스트에 추가
    return l  

def make_shorteds(l):
    cnt = 1  # 연속된 문자열의 개수 카운터
    result = ''  # 최종 압축 문자열을 저장할 변수
    for i in range(1, len(l)):  
        if l[i-1] == l[i]:  # 이전 요소와 현재 요소가 같은 경우
            cnt += 1  # 카운터 증가
        else:  # 이전 요소와 현재 요소가 다른 경우
            if cnt >= 2:  # 카운터가 2 이상인 경우(압축 가능)
                result += str(cnt) + l[i-1]  # 카운터와 이전 요소를 결과 문자열에 추가
            else:  # 카운터가 1인 경우(압축 불가)
                result += l[i-1]  # 이전 요소만 결과 문자열에 추가
            cnt = 1  # 카운터 초기화
    # 마지막 요소 처리(반복문 종료 후 남은 요소 처리)
    result += str(cnt) + l[len(l)-1] if cnt >= 2 else l[len(l)-1]  # 마지막 요소를 결과 문자열에 추가
    return result  # 압축된 문자열 반환

0개의 댓글