이제는 사용하지 않는 공부방/Algorithm
[완전탐색,파이썬] 문자열 압축 4/16
환상상상속상
2021. 4. 16. 12:39
# 문자열 압축 4/16
## 목적: 문자열을 단위를 기준으로 압축한다
## 아이디어: 문자열을 받고 단위를 1 ~ n으로 변화시키면서 압축을 하고 결과를 비교하여 가장 최소의 길이를 출력한다.
## 문제분류: 길이가 작기때문에 완전탐색문제다.
## step 부분을 어떻게 해야할지 곤란했다.
## 1) 1 부터 최대 길이가 아닌 중간 길이 즉, n/2까지만 고려하면 됐다.
## 2) for j in range(step, len(s), step) prev == s[j: j + step] 이렇게 하면 스텝만큼 커지니깐 비교가 가능하다
s = input()
n = 0
for step in range(1, len(s) + 1):
# *(1포인트)
result = ""
for i in range(0,len(s),step):
# *(2포인트)
if s[i: i + step] == s[i + step: i + 2*step]:
n+=1
else:
if n != 1:
result += str(n) + s[i: i + step]
if n == 1:
result += s[i: i + step]
n = 0
print(result)
# if same:
# n += 1
# else:
# n + 반복문자
# n = 0
def solution(s):
answer = len(s)
#압축 단위를 늘려간다.
for step in range(1, len(s) // 2 + 1):
compressed = ""
#앞에서부터 step만큼의 문자열 추출
prev = s[0: step]
count = 1
#step만큼 증가시키며 이전 문자열과 비교
for j in range(step, len(s), step):
if prev == s[j : j + step]:
count += 1
else:
compressed += str(count) + prev if count >= 2 else prev
prev = s[j : j + step]
count = 1
compressed += str(count) + prev if count >= 2 else prev
answer = min(answer, len(compressed))
return answer