문자열을 입력 받아서 연속 등장하는 문자의 수를 세어 압축한다
aabbaccc 라면 2a2ba3c(연속횟수, 연속문자 조합)으로 표현 가능하다
이때 연속되지 않는 문자는 1을 생략한다
이렇게 구할 수 있는 조합 중 가장 길이가 짧은 조합의 길이를 출력하는 문제이다.
answer는 문제에서 주어진 최대 문자열 길이 1000으로 초기화 (for 문 밖에 선언할 것)
res는 압축 문자열을 저장할 공간
cnt는 동일한 문자열의 몇 번 등장하는 지 저장하는 공간
tmp는 비교할 문자열(길이는 1에서 최대 문자열 전체 길이까지)
다른 블로그 풀이를 보니 4번 항목에서 문자열 끝까지가 아닌 문자열 절반까지만 돌리는 사람이 많았다. 나는 그래야 할 근거를 못 찾아서 일단 끝까지 돌렸다..
단, 이때 문자열 길이+1을 해줘야 문자열 길이가 1인 히든 테스트케이스를 통과할 수 있다.
def solution(s):
answer = 1000
for i in range(1, len(s)+1):
res = ""
cnt = 1
tmp = s[:i]
for j in range(i, len(s)+i, i):
if s[j:j+i] == tmp:
cnt += 1
else:
if cnt == 1:
res += tmp
else:
res += str(cnt)+tmp
print(res)
tmp = s[j:j+i]
cnt = 1
answer = min(answer, len(res))
return answer