프로그래머스 - 문자열 압축 (Python)

조민수·2024년 2월 1일
0

Programmers

목록 보기
11/85

Lv2, 문자열, 2020 KAKAO BLIND


문제 설명

  • 생략

제한 사항

  • s의 길이는 1 이상 1,000 이하입니다.
  • s는 알파벳 소문자로만 이루어져 있습니다.

입출력 예시

s result
"aabbaccc" 7
"ababcdcdababcdcd" 9
"abcabcdede" 8

풀이

  1. 비교할 문자를 기준으로 저장하고
  2. 해당 기준이 몇개가 등장하는 지 센다.
  3. 더 이상 등장하지 않으면, 등장한 수 만큼과 기준을 tmp 문자열에 더하고
  4. 다음 문자열을 탐색
def solution(s):
    answer = len(s)
    
    for step in range(1, len(s) // 2 + 1):
        tmp = ''
        
        target = s[0 : step]      # 지금 비교할 문자 기준
        cnt = 1
        
        for i in range(step, len(s), step):
            if target == s[i : i + step]:     # target과 이어지는 next 비교
                cnt += 1        # 같으면 숫자 증가
            else:
                tmp += str(cnt) + target if cnt >= 2 else target
                # 이때까지 압축한거 합산
                target = s[i : i + step]
                cnt = 1
                # prev, cnt 초기화
        
        tmp += str(cnt) + target if cnt >= 2 else target
        answer = min(answer, len(tmp))
                    
    return answer

힌트 참고, Lv2 ~ 3 사이 정도 되는 듯

profile
사람을 좋아하는 Front-End 개발자

0개의 댓글