본문 바로가기
공부-코딩테스트/코테풀이 - 자바, 파이썬

문자열 압축 (코딩테스트, 프로그래머스)

by 령과 2022. 1. 24.

문제

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

 

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

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

programmers.co.kr

 

나의 코드

def solution(s):
    answer=len(s)
    for i in range(1,len(s)//2+1):
        tmp=s   #슬라이싱 해야되니 기존 s를 보호하기 위해 tmp선언
        count=1 #몇번 반복됬는지 확인
        tmp_str="" #압축한 뒤의 str, 길이확인에 필요
        while len(tmp)>i: #슬라이싱 길이 만큼 남아있을 때까지 반복
            tmp_slice=tmp[:i] #슬라이싱
            tmp=tmp[i:]
            if tmp_slice==tmp[:i]: #압축 가능?
                count+=1
            else:                  #압축불가
                if count==1:       #압축된 것이 없다면 그냥 붙이기
                    tmp_str+=tmp_slice
                else:              #압축된 것 있다면
                    tmp_str+=str(count)+tmp_slice#압축횟수도 기입
                    count=1     
        if count==1: #마지막 부분이 붙기전에 while문에 빠져나와서 추가
            tmp_str+=tmp
        else:
            tmp_str+=str(count)+tmp
        answer=min(answer,len(tmp_str))
    return answer

단순 구현 문제, 다만 마지막 부분 while문에 빠져나오는 부분 처리가 필요한지 몰라서 찾는데 시간이 들었다.

댓글