이번에 해결해 볼 문제는 프로그래머스에 있는 문자열 압축이다.
문제 설명
- 문자열을 압축하려고 한다.
- 압축하는 방법은 다음과 같다.
- 문자열에서 같은 값이 연속해서 나타나는 것을 그 문자의 개수와 반복되는 값으로 표현하여 더 짧은 문자열로 줄여서 표현
- 단, 문자가 반복되지 않는 경우 숫자를 제외하고 문자를 그대로 표현한다.(즉, 1은 표현하지 않는다.)
- 단, 문자열은 제일 앞부터 정해진 길이만큼 잘라야 한다.
문제 해결 아이디어
- 해당 문제의 앞부터 정해진 길이만큼이라는 제약조건 덕분에 이 문제를 해결하는 것은 어렵지 않다.
- 정해진 길이만큼 이전 문자와 현재 문자를 비교해 가며 연속된 문자열의 수를 계산하면 된다.
문제 해결 코드
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
def solution(s):
answer = len(s)
for step in range(1, len(s)//2+1):
press = ''
prev = s[0:step]
count = 1
for j in range(step, len(s), step):
if prev == s[j:j+step]:
count += 1
else:
press += str(count) + prev if count != 1 else prev
prev = s[j:j+step]
count = 1
press += str(count) + prev if count != 1 else prev
answer = min(answer, len(press))
return answer