세상을 바꾸는 데이터

[2020 KAKAO BLIND RECRUITMENT] 문자열 압축 - 파이썬 본문

PS Study/이코테 문제풀이

[2020 KAKAO BLIND RECRUITMENT] 문자열 압축 - 파이썬

Industriousness 2022. 2. 1. 07:34

 

이코테에 있는 알고리즘 유형별 기출문제 구현 부분의 9번 문제를 풀어보았다.

이 문제는 문자열 압축 문제로서 2020년 카카오 블라인드 채용 코딩테스트 문제이기도 했다.

이것이 코딩 테스트다 WITH 파이썬

 

다음 프로그래머스 사이트에서 테스트해야 정상 동작하니 다음 사이트에 들어가 직접 코드를 작성해보자.

 

문제 링크:

https://programmers.co.kr/learn/courses/30/lessons/60057?language=python3 

 

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

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

programmers.co.kr

 

풀이 방법:

이 문제는 요구하는 내용을 그대로 구현하면 되는 문제이다. 

1. 문자열이 입력되었을 때 문자를 하나씩 확인한 후, 숫자인 경우는 따로 합계를 계산하고, 알파벳인 경우 별도의 리스트에 저장한다.

2. 결과적으로 리스트에 저장된 알파벳들을 정렬해 출력하고, 합계를 뒤에 붙여서 출력하면 정답 판정을 받을 수 있다.

이렇게 총 5가지 절차를 거치면 된다.

 

처음 풀었을 때는 대략적인 알고리즘 틀은 구현했지만 이를 소스코드로 옮기기가 쉽지 않다. 이게 바로 구현의 매력인 것 같다.

구현은 풀 수 있을 것 같지만 코드를 써보면 막상 잘 안 풀리기에 나 역시 많은 연습이 필요하다.

처음부터 다 잘하는 사람이 몇 명이나 있을까?

모든지 시간과 노력을 투자해 꾸준히 공부하고 복습하여 자신만의 것으로 만드는 것이 중요한 것 같다. 오늘도 파이팅!!

 

풀이 코드:

# 이코테
# 9번 문자열 압축

def solution(s):
    answer = len(s)
    # 1개 단위부터 압축 단위를 늘려가며 확인
    for step in range(1, len(s) // 2 + 1):
        compressed = ''
        prev = s[0:step]
        count = 1
        # 단위 크기만큼 증가시키며 이전 문자열과 비교
        for j in range(step, len(s), step):
            # 이전 상태와 동일하다면 압축횟수(compressed) 증가
            if prev == s[j:j + step]:
                count += 1
            # 다른 문자열이 나왔다면(압축을 못한다면)
            else:
                compressed += str(count) + prev if count >= 2 else prev
                prev = s[j:j + step] # 다시 상태 초기화
                count = 1
        # 남아 있는 문자열 처리
        compressed += str(count) + prev if count >= 2 else prev
        # 만들어지는 압축 문자열이 가장 짧은 것이 정답
        answer = min(answer, len(compressed))
    return answer

 

728x90
반응형
Comments