2시간 동안 고민하고 해결방법 모색하고 결국 구현까지 해봤던 코드이지만 결국 풀리지 않았다.
너무 마음이 아프다.
def solution(s):
answer = 10000
length = len(s)
for i in range(1, length // 2 + 1):
result = 0
#두번째 반복문의 루프제어변수 j
j = 0
while j + i <= length:
#반복횟수 계산
repeat = s[j: j+i]
count = 0
while j + i*(count + 2) <= length:
if(repeat == s[j + i*(count + 1): j + i*(count + 2)]):
count += 1
end = j + i*(count + 2)
else:
break
#반복횟수가 0일때 == 반복 안할 때
if(count == 0):
result += i
j += i
#반복횟수가 0보다 클 때
else:
#count의 자릿수 구하기
tmp = 1
while count >= 10:
count = count // 10
tmp += 1
result += tmp
result += i
j = end
if(j < length):
tmp = length - j
result += tmp
answer = min(answer, result)
return answer
왜 틀렸나 봤더니 문제를 잘못읽었다.
이문제를 정독했을 때 몰랏던 점이 테스트케이스 5를 보고 알 수 있었다.
테스트 케이스5를 가져와 보면
x / ababcdcd / ababcdcd 이렇게 나누는게 불가능 하다는 것이고
무조건 압축단위 크기인 K에 맞춰서 딱딱 압축만 가능 하다는 것이다.
그래서 사실상 더 쉬운 문제를 문제를 잘 못읽어 어렵게 풀고 잇었다ㅜㅡㅜ
다시 문제를 풀어봤다!
구현하는데는 20분이 걸렸지만 최종적으로 걸린시간은 두둥탁!
디테일적인 작은요소가 안보여서 계속 삽질했다.
여기서 느낀점은 코드만 보는것보다 직접 출력해봐서 눈으로 확인해보는게 디테일한 실수를 잡는데 도움이 되었다.
정확히는
while j + i*(count + 2) <= length:
if(repeat == s[j + i*(count + 1): j + i*(count + 2)]):
count += 1
end = j + i*(count + 2)
end를 마지막에 지정해줄 때 count가 +=1 연산 되는 부분을 생각치 못하고 end지점을 지정했다.
(정말 초보적인 실수이다.)
참 힘들게 풀었다 정말!!!!!