본문 바로가기
알고리즘

[알고리즘] 문자열 압축

by keel_im 2021. 5. 3.
반응형

포인트

  • 구현 문제를 풀었을 때, 그것만큼 또 희열이 있는 것이 몇 없을 것 같습니다. 하지만 틀리면 그냥 기분이 나쁩니다. 문제에서 주어줬듯이 문자열 압축을 고민하는 문제 입니다. (허프만 알고리즘이 떠오릅니다.)
  • for loop 구간에서 len(s)//2+1 만 순회를 하여도 성립하는 이유는 그 이후를 돌면 어차리 원본 값이 나오기 때문에 할 필요성이 없어서 입니다. 

🧶문서는 항상 수정될 수 있습니다. 비판은 환영합니다. 

python

def add(cnt: int, before: str) -> str:
    return before if cnt == 1 else str(cnt) + before


def check(s: str, unit: int) -> int:
    temp = ''
    before = s[:unit]
    # 시작구간 설정
    cnt = 1
    for i in range(unit, len(s), unit):
        current = s[i:i + unit]
        # 현재 단어
        if before == current:
            # 이전 단어와 현재 단어가 같다면 count+=1
            cnt += 1
        else:
            temp += add(cnt, before)
            cnt = 1
            # 다를 경우 카운트 1 초기화
        before = current
        # 이전 값을 현재 값으로 바꾸기
    else:
        # 전부 끝났는데 cnt 가 남아있다.
        temp += add(cnt, before)
    return len(temp)


def solution(s: str) -> int:
    answer = 987654321
    if len(s) == 1:
        # 1일 경우는 무조건 1이다.
        return 1

    for i in range(1, len(s) // 2 + 1):
        # 반 이상이 넘어가는 경우는 고려할 필요가 없다. 어차피 성립하지 않는다.
        result = check(s, i)
        answer = min(answer, result)
    return answer
반응형

'알고리즘' 카테고리의 다른 글

[알고리즘] 파일명 정렬  (0) 2021.05.04
[알고리즘] N진수 게임  (0) 2021.05.04
[알고리즘] Running Sum of 1d Array  (0) 2021.05.03
[알고리즘] 괄호 변환  (0) 2021.05.02
[알고리즘] 오픈 채팅방  (0) 2021.05.02

댓글