https://school.programmers.co.kr/learn/courses/30/lessons/60057
문자열 길이의 절반보다 큰 수로 문자열을 자르면 문자열 압축이 불가능하기 때문에
1부터 문자열 길이의 절반만 탐색한다. ==> 압축하는 문자열의 길이
(처음에 len(s)//2+1로 범위를 잡아줬다가 tc5에서 실패했다. 문자열의 길이가 1일 경우를 고려하여 +2를 해준다.)
cnt(같은 문자열의 개수), result(압축된 문자열), temp(비교 문자열) 변수를 뒀다.
i(압축하는 문자열의 길이)번째 문자부터 문자열을 탐색하는데, 인덱스는 i씩 증가한다.
temp와 현재 문자열을 비교하여 같으면 cnt를 증가시키고,
다르면 저장되어 있는 cnt와 temp를 result 문자열에 붙여주고 두 값을 현재의 값으로 갱신한다.
문자열 압축할 때 인덱스의 범위를 지정해뒀기 때문에 모든 탐색을 종료한 후 끝에 문자열이 남아있을 수 있다.
그래서 마지막으로 남은 문자열을 모두 붙인 후 문자열 길이의 최솟값을 갱신한다.
# 프로그래머스 60057: 문자열 압축 (2020 KAKAO BLIND RECRUITMENT)
def solution(s):
answer = 1000 # s의 최대 길이
# 문자열의 길이의 절반만 탐색 (문자열의 길이가 1일 경우를 고려하여 +2)
for i in range(1, len(s)//2+2):
cnt = 1
result = ''
temp = ''
# 문자열 압축
for j in range(i, len(s)+1, i):
if s[j-i:j] == temp:
cnt += 1
else:
if cnt < 2:
result += temp
else:
result += str(cnt) + temp
cnt = 1
temp = s[j-i:j]
# 남은 문자열 전부 붙이기
if cnt < 2:
result += temp + s[j:]
else:
result += str(cnt) + temp + s[j:]
# 최솟값 갱신
answer = min(answer, len(result))
return answer
설명하는 건 어려워..💧
'알고리즘 > 프로그래머스' 카테고리의 다른 글
[프로그래머스 | Lv2] 조이스틱 (Python) (0) | 2023.04.11 |
---|---|
[프로그래머스 | Lv3] 등굣길 (Python) (0) | 2023.03.22 |
[프로그래머스 | Lv2] 괄호 변환 (Python) - 2020 KAKAO BLIND RECRUITMENT (0) | 2023.03.07 |
[프로그래머스 | Lv2] 수식 최대화 (Python) - 2020 카카오 인턴십 (0) | 2023.03.06 |
[프로그래머스 | Lv2] 순위 검색 (Python) - 2021 KAKAO BLIND RECRUITMENT (0) | 2023.03.05 |