티스토리 뷰
728x90
반응형
문제
https://programmers.co.kr/learn/courses/30/lessons/60057?language=python3
코드
def solution(s):
answer = 99999999
for i in range(1, len(s)//2 + 1):
ret = ""
count = 1
prev = s[:i]
for j in range(i, len(s)+i, i):
if prev == s[j:j+i]:
count += 1
else:
if count != 1:
ret = ret + str(count) + prev
else:
ret = ret + prev
prev = s[j:j+i]
count = 1
answer = min(answer, len(ret))
return min(answer, len(s))
문자열을 압축하기 위해서 1일때부터 문자열 전체를 검사할 필요없이 전체 문자열에 길이에 반까지만 검사하면 되어서 len(s)//2 + 1을 사용해준다.
2번째 for문은 i가 2일 때 2씩증가하여 계속 비교를 하는 for문이다. range(i, len(s)+i, i)에서 len(s)에 +i를 안해주면 맨마지막 값을 비교못해준다.
prev에 이전 값을 넣어주고 prev == s[j:j+1]이 같다면 count += 1 해주고 다를때는 count가 1이라면 count는 더해주지 않고 1이 아니라면 count도 더해준다.
그리고 prev에 값을 바꿔주고 count도 1로 초기화 시켜준다. answer에는 가장 작은 값을 넣어준다.
원래 문자열 보다 작다면 그 값을 리턴해준다.
반응형
'알고리즘 > 프로그래머스' 카테고리의 다른 글
[프로그래머스] Level2, 3차 파일명 정렬 (Python) (0) | 2021.06.16 |
---|---|
[프로그래머스] Level2, 캐시 (Python) (0) | 2021.06.14 |
[프로그래머스] Level2, 괄호 변환 (Python) (0) | 2021.06.13 |
[프로그래머스] Level2, 구명보트 (Python) (0) | 2021.06.12 |
[프로그래머스] Level2, H-Index (Python) (0) | 2021.06.12 |
댓글