반응형
코드
def solution(s):
answer = len(s)
for n in range(1, len(s)//2+1):
count = 1
temp_sentence = ""
for index in range(0, len(s), n):
prev_s = s[index:index+n]
next_s = s[index+n:index+(2*n)]
if prev_s == next_s:
count+=1
else:
if count != 1:
temp_sentence += str(count)+prev_s
else:
temp_sentence += prev_s
count = 1
# print(temp_sentence, len(temp_sentence))
if answer > len(temp_sentence):
answer = len(temp_sentence)
return answer
문제 풀이
아 문제를 풀고나니 왤케 어렵게 생각하고 실제로도 고민을 했는지 스스로가 한심쓰...
우선 첫번째 반복문의 경우 "몇개씩 볼건지" 에 대한 숫자 n을 설정한다. 최대 압축률은 문자길의 반이기 때문에
len(s)//2 까지로
두번째 반복문은 그래서 실제로 문자열을 보는 걸 의미라고
prev = s[index:index+n] / next = s[index+n:index+(2*n)] 을 통해 앞 문자열(prev) 과 뒤 문자열(next)를 비교한다.
만약 두 문자열이 같다면 count를 올려준다.
(이 부분에서 애를 먹었었다. n=1 일때 ccc의 경우 2c+c 가 아니라 3c 라고 줄이는 걸 변경하는데 시간을 썼다.)
만약 두 문자열이 다르다면 str(count) + prev를 변경되는 문자열(temp_sentence)에 추가해주고 count는 다시 원복해준다.
변경되는 문자열(temp_sentence)의 길이가 원래 문자열(s)보다 짧다면 해당 길이를 기준으로 변경해준다.
n의 크기를 반복하며 가장 짧게 변하는 문자열의 길이를 찾는다.
끝!
문제는 여기
https://programmers.co.kr/learn/courses/30/lessons/60057
반응형
'algorithm > programmers' 카테고리의 다른 글
순위 검색 [프로그래머스] (0) | 2021.11.22 |
---|---|
주식 가격 [프로그래머스] (0) | 2021.11.17 |
삼각 달팽이 [프로그래머스] (0) | 2021.11.05 |
n^2 배열 자르기 [프로그래머스] (0) | 2021.10.30 |
전력망을 둘로 나누기 [프로그래머스] (0) | 2021.10.09 |
댓글