Algorithm/Programmers

[Programmers] Lv2. 문자열 압축

by somida 2021. 5. 24.

문제

바로가기

 

코딩테스트 연습 - 문자열 압축

데이터 처리 전문가가 되고 싶은 "어피치"는 문자열을 압축하는 방법에 대해 공부를 하고 있습니다. 최근에 대량의 데이터 처리를 위한 간단한 비손실 압축 방법에 대해 공부를 하고 있는데, 문

programmers.co.kr

 

풀이

  • 최대 문자열 길이는 원래 문자열의 길이로 설정해두고, 1 ~ 문자열 전체 길이의 반까지 반복문을 돌린다.
  • 기준 문자열(stand)과 개수(cnt)를 설정한 후 중복된 문자열을 찾는 반복문을 수행하는데
  • 만약 기준 문자열과 같다면 개수를 추가해주고, 아니라면 이미 중복된 문자열이 존재할 때는 개수를 문자열로 바꿔서 추가해주고, 중복된 값이 없었다면 그대로 문자열만 추가해준다.
  • 그 후 기준문자열과 개수를 초기화해주고, 반복문이 끝나면 answer를 최솟값으로 갱신해준다.

 

코드

def solution(s):
    answer = len(s)
    for i in range(1, len(s) // 2 + 1):
        answer_str = ""
        stand, cnt = s[:i], 1
        for j in range(i, len(s) + i, i):
            if stand == s[j:j + i]:
                cnt += 1
            else:
                # 이미 중복된 문자열이 있었으면,
                if cnt != 1:
                    answer_str += str(cnt) + stand
                # 중복된 값이 없었으면, 그대로 
                else:
                    answer_str += stand
                stand, cnt = s[j:j + i], 1
        answer = min(answer, len(answer_str))
    return answer
반응형

댓글