728x90
programmers.co.kr/learn/courses/30/lessons/60057#
def solution(s):
len_s = len(s)
answer = len_s
if len_s == 1:
return answer
cnt = 1
while cnt < len_s //2 + 1:
i = 0
zip_val = 0
zip_string = ''
while i < len_s:
tmp_s = s[i:i + cnt]
if tmp_s == s[i + cnt:i + 2 * cnt]:
zip_val += 1
else:
if zip_val:
zip_string += str(zip_val+1) + tmp_s
else:
zip_string += tmp_s
zip_val = 0
i += cnt
else:
zip_string += s[i+cnt:]
cnt += 1
if len(zip_string) < answer:
answer = len(zip_string)
return answer
1부터 문자열 길이의 반까지 while문으로 돌리면서 모든 문자열을 슬라이싱하여 중복되는지 확인하였다.
문자열이 중복되면 zip_val를 하나 증가시키고 다음 문자열을 비교한다.
중복되지 않으면 zip_val 값에 따라 다른 문자열을 zip_string에 저장한다.
끝까지 확인하였을때(else를 통해) 마지막 남은 부분도 zip_string에 저장한다.
그때 zip_string의 길이를 확인하여 값이 작으면 answer를 갱신한다.
이문제도 C로 풀어보려했으나 C++만 지원해서 풀지 않았다.
'STUDY > Algorithm' 카테고리의 다른 글
[백준] 10844 쉬운계단수 python (0) | 2021.04.13 |
---|---|
[백준] 2579 계단오르기 python (0) | 2021.04.13 |
[프로그래머스] LEVEL2 삼각 달팽이, python, C (0) | 2021.04.04 |
[프로그래머스] 최솟값만들기 python, C (0) | 2021.04.02 |
[프로그래머스] 3진법 뒤집기, python, C (0) | 2021.04.02 |