1. 문제
문제 설명
제한사항
입출력
입출력 예시
2. 풀이 과정
내가 생각한 진행 과정
- s = "aabbaccc"인 경우 압축하기
- s = "ababcdcdababcdcd"인 경우 압축하기
- 1개: X
- 2개: "2ab2cd2ab2cd"
- 8개: "2ababcdcd"
- 압축은 단어갯수의 반까지만 진행해도 괜찮음
- 1~단어갯수의 반까지 압축해보면서 front, back 비교하기
- front는 단어의 처음부터 i개(back과 비교한 후 front=back으로 값 변경됨)
- back은 압축문자 갯수만큼 띄어진 문자
- front == back이라면 cnt += 1
- front != back이라면 cnt == 1이면 문자를 최종 결과(answer)에 더하고, cnt != 1이면 str(cnt)랑 문자를 최종 결과(answer)에 더함
- 여기서 끝나면, 마지막 값이 들어오지 못함
- 마지막 값까지 알차게 넣어주고, 가장 짧은 압축 경우를 찾기 위해 기존의 mymin과 최종결과(answer) 길이 비교 진행
코드
def solution(s):
mymin = 99999999999999999999999999
answer = ''
if len(s) == 1:
return 1
for i in range(1, len(s) // 2 + 1):
cnt = 1
front = s[:i]
for j in range(i, len(s), i):
back = s[j:j+i]
if front == back:
cnt += 1
else:
if cnt == 1:
answer += front
else:
answer += str(cnt) + front
front = back
cnt = 1
if cnt == 1:
answer += front
else:
answer += str(cnt) + front
if mymin > len(answer):
mymin = len(answer)
answer = ''
return mymin