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이 반환되었기 때문이다. 경계값일때 확인하는 습관을 들이자!