여름의 서재
[프로그래머스] 문자열 압축 본문
728x90
📕 문제
https://programmers.co.kr/learn/courses/30/lessons/60057
💡 풀이법
1. 문자열을 압축할 길이를 1부터 문자열길이//2까지 설정하고 압축해서 최소 길이를 구한다.
( 압출할 길이가 문자열 길이//2보다 커지면 압축 못함)
2. 처음 압축할 길이만큼의 문자열을 s에서 슬라이싱해서 temp에 넣는다. 그리고 압축한 결과물을 담을 new 변수를 반만든다. cnt는 압축할 문자열의 개수이다.
3. 그 뒤의 문자열을 압축할 길이만큼 잘라서 만약 temp와 같다면 cnt를 1 증가시키고, 다르면 cnt가 1일때는 temp를 그대로 new에 추가하고 cnt가 1이 아니라면 cnt와 temp를 new에 추가한다. 그리고 temp는 지금 인덱스부터 압축할 문자열 길이까지 슬라이싱한 문자열로 바꾸고, cnt도 다시 1로 초기화시킨다.
4. for문이 끝나도 마지막 문자열이 안들어간 상황이기 때문에 한번더 new에 추가해주어야한다.
5. 그다음 answer와 new의 길이를 비교해서 더작은것을 answer에 저장한다.
def solution(s):
answer = 1000
if len(s) == 1:
return 1
for n in range(1, len(s)//2+1):
new = ''
temp = s[:n]
cnt = 1
for i in range(n, len(s), n):
if temp == s[i:i+n]:
cnt += 1
else:
if cnt == 1:
new += temp
else:
new += str(cnt) + temp
temp = s[i:i+n]
cnt = 1
if cnt == 1:
new += temp
else:
new += str(cnt) + temp
answer = min(answer, len(new))
return answer
'알고리즘 > 프로그래머스' 카테고리의 다른 글
[프로그래머스] 괄호 변환 (0) | 2021.11.07 |
---|---|
[프로그래머스] 타겟 넘버 (0) | 2021.11.07 |
[프로그래머스] 위클리챌린지_12주차_피로도 (0) | 2021.11.07 |
[프로그래머스] 위클리 챌린지_10주차_교점에 별 만들기 (0) | 2021.10.21 |
[프로그래머스] 입국심사 (이분탐색) (0) | 2021.10.06 |
Comments