반응형
풀이
# 주석은 아래 글에서 확인
def solution(s):
answer = 1000
if len(s) == 1: # 1
answer = 1
for i in range(1, (len(s) // 2) + 1):
temp = s[0:i]
c_str = ''
count = 1
for j in range(1, 1001):
if i * j > len(s):
c_str += s[i * (j - 1):] # 2
break
if temp == s[i * j:i * (j + 1)]:
count += 1
else:
if count == 1:
count = 'A' # 3
c_str += str(count) + temp
temp = s[i * j:i * (j + 1)]
count = 1
c_str = c_str.replace('A', '') # 3_1
if len(c_str) < answer:
answer = len(c_str)
return answer
[ ]의 slicing을 이용해 푼 문제입니다. 예외를 생각 못해서 좀 오래 걸렸는데 생각하는데 오래 걸린 부분은 세가지 였습니다.
#1. 주어진 s의 길이가 1이면 answer은 무조건 1임을 생각해보시길..
=> 이걸 간과하고 풀어서 테스트 케이스를 몇개 통과 못했었습니다.. 하하..
#2. 문자열의 길이가 기준이 되는 압축 길이로 딱 떨어지지 않으면 나머지를 추가해 줘야 합니다.
=> 14개짜리 문자를 3개씩 압축하면 2 문자가 남는데 이걸 마지막에 붙여줘야 합니다. 구현에서 좀 고민이 있었습니다.
#3. *** 압축의 길이는 10이 넘어갈 수 있어요. 이것 때문에 시간을 진짜 잡아먹었어요.
=> 저는 처음에 압축이 안되는 문자 앞에는 1을 붙이고 마지막에 replace()로 전부 제거했습니다. 근데 압축이 10을 넘으면 1이 제거되면 당연히 오류가 발생하겠죠? 그래서 결국 압축이 안되는 문자는 A를 붙이고 나중에 전부 제거했습니다..
이 부분이 테스트 5개 중에 없어서 생각하기 어려웠네요. 하지만 채점용 테스트 케이스에는 있으니 주의합시다..
반응형
'개발 > PS' 카테고리의 다른 글
프로그래머스 Lv1 숫자 문자열과 영단어(파이썬) (0) | 2021.12.30 |
---|---|
프로그래머스 Lv1 신규 아이디 추천 (파이썬) (0) | 2021.12.30 |
프로그래머스 Lv1 로또의 최고 순위와 최저 순위 (파이썬) (0) | 2021.12.30 |
프로그래머스 Lv1 없는 숫자 더하기 (파이썬) (0) | 2021.12.30 |
프로그래머스 Lv1 정렬 k번째 수 (파이썬) (0) | 2021.12.30 |