[프로그래머스-LV2] 문자열 압축 풀이

아이엠강욱·2023년 5월 23일
0

코딩테스트

목록 보기
14/23

해당 문제를 확인하시고 싶으면 아래 링크를 통해 확인해주세요!
https://school.programmers.co.kr/learn/courses/30/lessons/60057


이 문제는 완전탐색으로 해결이 가능하다.
1개씩 나눴을 때, 2개씩 나눴을 때 등 케이스를 모두 확인해서 각 케이스별로 나오는 결과 문자열의 길이를 저장해서 최소값을 반환하면 된다.

이 때 문자열 탐색은 문자열 길이의 반까지만 탐색이 가능하다.
예를들어 문자열 길이가 8이면 총 4개씩 나누는 것 까지 가능하다.
5개를 기준으로 나누게 되면 나누지 못한다.

"""
프로그래머스 LV2: 문자열 압축
https://school.programmers.co.kr/learn/courses/30/lessons/60057

2020년도 KAKAO BLIND RECRUITMENT
"""

def solution(s):
    answer = []
    
    # s의 길이가 1이면 바로 return
    if len(s) == 1:
        return 1
    
    # 문자열 쪼갤 수 있는건 len(s) // 2 + 1
    # 문자열 길이가 8이면 최대 4개씩 자를 수 있음. 길이가 9여도 최대 4개
    for sp in range(1, (len(s)//2 + 1)):
        temp_str = s[:sp]   # 기준 문자열
        temp_result = ''
        count = 1   # 같은 문자 연속 횟수
        for i in range(sp, len(s), sp):
            target_str = s[i:i+sp]   # 비교 문자열
            if temp_str == target_str:   # 비교했는데 같을경우
                count += 1
            else:   # 비교했는데 문자열이 다른 경우
                temp_result += str(count) + temp_str if count > 1 else temp_str
                
                # 초기화 작업
                count = 1
                temp_str = s[i:i+sp]
        # 남아있는 문자열 처리
        temp_result += str(count) + temp_str if count > 1 else temp_str
        answer.append(len(temp_result))
        
    
    return min(answer)

나는 남아있는 문자열 처리에서 애를 먹었다.
풀지 못하고 구글링을 통해 다른 사람의 풀이를 참고했다.

2번째 for문을 돌고나면 아마 문자열 모두를 돌지않고 남는 부분이 있는데 그 남는 부분을 처리해줘야 확인이 가능하다.

profile
블로그 이전했습니다!! https://dev-iamkanguk.tistory.com/ <<- 여기로 오세용!!

0개의 댓글