🔗https://programmers.co.kr/learn/courses/30/lessons/60057
만약 문자열의 길이가 10이라면 압축할 수 있는 최대 범위는 5
즉, 문자열이 s
라고 했을 때 len(s)
의 1/2 이다.
가능한 단위마다(1
~len(s)/2
) 해당 문자열을 압축 시켜 보고,
그 중 가장 작은 것을 출력하면 된다.
def solution(s):
length=len(s)
minlen=length
str1, str2 = "",""
#가능한 단위 범위 만큼 반복
for unit in range(1,int(length/2)+1):
tmplen=0 #해당 단위에서의 길이를 저장하는 변수
num=1 #같은 갯수를 세는 변수
cur=0 #커서
while cur<length:
str1=s[cur:cur+unit]
str2=s[cur+unit:cur+(2*unit)]
#str1, str2에 단위만큼 잘라준다
if str1==str2:
#만약 같다면 다음 문자에도 같을 확률이 있으니 num+=1 해준 후 넘어간다.
num+=1
else:
#다르다면 문자열에 추가 시켜준다
if num==1: #만약 num=1이라면 => 이전에 같은 문자열이 없어서 압축 시킬 필요가 없다면
tmplen+=len(str1) #해당 문자열(str1)의 길이만 더함
else: #1보다 크다면 => 이전에 같은 문자열이 있었어서 압축 시켜야 한다.
tmplen+=len(str(num)) #num의 자릿수를 고려하기 위해 len(str(num))을 더해준후
tmplen+=len(str1) #해당 문자열(str1)의 길이를 더해준다.
num=1
cur+=unit
#작은 길이를 저장
minlen=min(minlen,tmplen)
return minlen