간격을 1씩 증가시키며 모든 경우의 수의 문자열 길이를 검사했다.
좋은 코드같진 않지만 슬라이싱 할 때 주의점을 배울 수 있어서 좋았던 문제였다.
소스코드:
def solution(s):
answer=len(s)
if answer==1:
return 1
options=[]
for interval in range(1,(len(s)//2)+1):
p=process(s,interval)
if p<=answer:
answer=p
return answer
def process(s,interval):
list=[]
for i in range(0,len(s),interval):
list.append(s[i:i+interval])
return len(shrink(list))
def shrink(list):
shrinked=[list.pop(0)]
count=1
while list:
word=list.pop(0)
if word==shrinked[-1]:
count+=1
if [word]!=list[0:1]:
shrinked[-1]=str(count)+shrinked[-1]
else:
count=1
shrinked.append(word)
return "".join(shrinked)
슬라이싱 주의해야할 점: 아래처럼 슬라이싱한 부분과 원소를 비교할때 슬라이싱한 결과는 리스트로 반환됨을 항상 기억하고 있어야한다. 따라서 밑에 1번같은 경우에 비교문은 항상 False를 반환한다. (타입이 다르므로)
1번
if word!=list[0:1]:
shrinked[-1]=str(count)+shrinked[-1]
2번
if [word]!=list[0:1]:
shrinked[-1]=str(count)+shrinked[-1]
사실 그렇게 좋은 해결책같진 않다. 슬라이싱 없이 원소접근을 하면 인덱스에러가 나는데 여러모로 경계조건 같은것을 신경쓰기 귀찮아서 그냥 word를 리스트로 만들어버렸다. 아무쪼록 해결이 되긴 한다.