곰퓨타의 SW 이야기

[12-03 구현 문제] 문자열 압축 본문

TIL/이것이 코딩테스트다_파이썬 문제 (백준문제 外)

[12-03 구현 문제] 문자열 압축

곰퓨타 2021. 5. 6. 20:45

최근 보고 있는 책인  '이것이 코딩테스트다 with 파이썬 편_나동빈_한빛미디어' 에 있는 문제이다.

www.hanbit.co.kr/store/books/look.php?p_code=B8945183661

 

이것이 취업을 위한 코딩 테스트다 with 파이썬

IT 취준생이라면 누구나 가고 싶어 하는 카카오, 라인, 삼성전자의 2016년부터 2020년까지의 코딩 테스트와 알고리즘 대회의 기출문제를 엄선하여 수록하였다.

www.hanbit.co.kr

 

 

문제는 프로그래머스에 있다.

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

 

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

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

programmers.co.kr

 

이 문제는 카카오 문제로 과거에 풀었던 경험이 있다.

kom-story.tistory.com/15

 

[프로그래머스 level2 문자열 압축] 예외 상황을 놓치지말자

level2..하나하나 풀어나가는데 굉장히 많은 시간이 소요된다😂 정말 정말 어려운 것 같다 ... 이번 문제는 2020 kakao blind recruitment라는 단어를 보고 무섭다고 생각하고 들어갔던 문제이다..! 해결해

kom-story.tistory.com

 

하지만, 책에 있기 때문에 오랜만에 다시 도전해보았다.

 

 

def solution(s):
    answer = len(s)
    for i in range(1,len(s)//2+1):
        compressed_n = 0
        temp = s[:i]
        cnt = 1
        for j in range(i,len(s),i):
            if temp == s[j:j+i] :
                cnt += 1
            else :
                temp_n =  len(str(cnt)) + i if cnt>1 else i
                compressed_n += temp_n
                temp = s[j:j+i]
                print(i,j,j+i,temp)
                cnt = 1

        if cnt > 1:
            compressed_n += len(str(cnt)) + i
        else :
            compressed_n += len(temp)
        answer = min(answer,compressed_n)

    return answer

하다가 알게 된점 이지만, 문자열의 길이가 10인 경우 (ex . s = "abcabcdede" 이면) s[7:10] 과 s[7:11]이 같은 값이 나온다. s는 10번째 index가 없기 때문에 끝까지 같은 값이 나오는 것을 볼 수 있다.

Comments