본문 바로가기
ALGORITHM/PROGRAMMERS

[PG/Python] 문자열 압축

by 안녕나는현서 2021. 11. 3.
728x90

📌 문제

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

 

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

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

programmers.co.kr

 

📌 문제 접근 방법

  1. 처음엔 문자열 길이의 약수들로만 단위를 줬었는데, 테스트 케이스가 틀렸길래 꼭 나누어 떨어지지 않더라도 남은 문자열은 더해주면 된다고 문제에 적혀있어서 이 부분을 수정했다.
  2. 첫 번째 반복문에서 i는 1부터 len(s)-1까지를 순회한다. i가 문자열을 나누는 단위가 된다.
  3. 두 번째 반복문에서 j는 i부터 len(s)-1까지 i만큼 점프하며 순회한다.
    그리고, 그 전의 단위문자와 비교해서 같다면 cnt를 +1해주고 다르다면 cnt와 단위문자를 temp에 저장하고 cnt는 초기화 시켜준다. (cnt가 1일 경우는 cnt는 생략한다.)
  4. 반복문이 모두 끝나고 난 뒤, 남은 문자열을 temp에 저장해준다.
  5. 그리고 answer와 temp의 길이를 비교하여 더 작은 값으로 갱신시켜준다.

 

📌 코드

# 프로그래머스 문자열 압축

def solution(s):
    answer = len(s)

    for i in range(1, len(s)):
        temp = ''
        cnt = 1
        for j in range(i, len(s), i):
            if s[j-i:j] == s[j:j+i]:
                cnt += 1
            else:
                if cnt != 1:
                    temp += str(cnt)
                
                cnt = 1
                temp += s[j-i:j]

        if cnt != 1:
            temp += str(cnt)
        
        cnt = 1
        temp += s[j:j+i]
        
        # print(temp, i)
        answer = min(answer, len(temp))

    return answer

print(solution("abcabcdede"))
728x90

'ALGORITHM > PROGRAMMERS' 카테고리의 다른 글

[PG/Python] 전력망을 둘로 나누기  (0) 2021.11.14
[PG/Python] 타겟 넘버  (0) 2021.11.04
[PG/Python] 모의고사  (0) 2021.08.21
[PG/Python] 가장 큰 수  (0) 2021.08.18
[PG/Python] K번째수  (0) 2021.08.16

댓글