모눈종이에 사각사각
[프로그래머스] 문자열 압축 본문
🍎 [프로그래머스] 문자열 압축
문제링크
https://programmers.co.kr/learn/courses/30/lessons/60057
⚾ 코드
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