Programming/for coding test
[Programmers] 문자열 압축 / Python
7JeY
2022. 2. 25. 15:26
반응형
def solution(s):
answer = len(s)
for i in range(1, int(len(s)/2) +1): #압축 단위는 아무리 커봤자 문자열 길이의 절반
pos = 0 #어느 위치에서 문자열을 처리하고 있는지 표현하는 변수
#압축되었을때의 길이만 필요하다..길이만 구해보겠음
length = len(s) #문자열 길이로 표현한 다음 압축되는것 만큼 빼거나 더해서 구한다
while pos + i <= len(s) : #진행은 문자열 끝까지
unit = s[pos:pos+i] #압축 하고자 하는 단위만큼 문자열을 불러온다
pos += i
#포지션 진행해서 거기에 이제 ab가 또 있는지 확인해야한다
cnt = 0
while pos + i <= len(s):
if unit == s[pos:pos+i]: #ab읽어서 다음 2~4에 ab가 있는지 같은지
cnt +=1
pos += i
else:
break #아니면 while문 빠져나오기..
#이 while끝나고 나면 unit이 몇번 반복되었는지 구해졌을 것
if cnt > 0: #반복된게 있다고 하면 ..
length -= i * cnt # 한번 반복되면 한번 빼고 두번 반복되면 두번 빼고 이런식
if cnt < 9 :
length += 1
elif cnt < 99 :
length += 2
elif cnt < 999:
length += 3
else:
length +=4
answer = min(answer, length)
return answer
반응형