모눈종이에 사각사각

[프로그래머스] 문자열 압축 본문

CodingTest/Programmers

[프로그래머스] 문자열 압축

모눈종이씨 2022. 4. 15. 20:02

🍎 [프로그래머스] 문자열 압축

문제링크

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

 

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

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

programmers.co.kr

 

⚾ 코드

def solution(s):
    result = 1000  # 최종 반환 될 문자열의 길이
    if len(s) == 1:  # 만약 문자열의 길이가 1이라면
        return 1  # 1 반환

    for i in range(1, len(s)):
        # i = 자르는 단위 수
        answer = ""
        count = 1
        for j in range(0, len(s), i):
            if j+i < len(s):  # j+i가 문자열의 길이 보다 작을 때 == 아직 탐색할 문자열이 남았을 때
                if s[j:j+i] == s[j+i:(j+i)+i]:
                    count += 1
                else:
                    if count == 1:
                        answer += s[j:j+i]
                    else:
                        answer += str(count)+s[j:j+i]

                    count = 1

            elif j+i == len(s):  # j+i가 문자열의 길이와 같을 때 == i개로 문자열이 딱 맞게 잘라질 때
                if count == 1:
                    answer += s[j:]
                else:
                    answer += str(count)+s[j-i:j]
            else:  # j+i가 문자열의 길이보다 클 때 == i개로 문자열을 자르고 남는 것이 있을 때
                answer += s[j:]

        if len(answer) < result:  # answer의 길이가 result보다 짧다면
            result = len(answer)  # 갱신

    return result

 

🔔 해결 과정 & 깨달은 점

- for문으로 자르는 단위수 만큼 돌려서 확인을 했다.

- j+i가 문자열의 길이와 같을 때와 문자열의 길이보다 클 때 나누는 것에서 살짝 헤맸지만, 하나씩 코드를 찍어보면서 확인하며 풀었더니 통과되었다.

- 다 해결을 했는데 테스트케이스 5번만 통과가 안 됐었다. 이유는 문자열의 길이가 1일때를 처리해주지 않아서 초기값인 1000이 반환되었기 때문이다. 경계값일때 확인하는 습관을 들이자!

'CodingTest > Programmers' 카테고리의 다른 글

[프로그래머스] 전화번호 목록  (0) 2022.04.16
Comments