[알고리즘] 프로그래머스 2단계 문자열 압축
def solution(s):
lenS = len(s)
num = 1
result = []
if lenS == 1:
return 1
while True:
stack = []
for i in range(0, lenS):
if i % num == 0:
stack.append(s[i:i+num])
if len(stack) == len(s):
result.append(stack)
if len(stack) != 1:
result.append(stack)
num += 1
if num == lenS + 1 :
break
kikiki = 1000
for answer in result:
new = []
index = 0
k = 0
while True:
if answer[index] == answer[index+1]:
index += 1
else:
new.append(answer[k:index+1])
k = index + 1
index += 1
if index == len(answer)-1:
new.append(answer[k:index+1])
break
new_str = ''
for n in new:
if len(n) != 1:
new_str += str(len(n))
new_str += str(n[0])
if len(new_str) < kikiki:
kikiki = len(new_str)
return kikiki
입출력 예
풀이과정
aabbaccc
를 1개, 2개 ... 8개 단위로 자른다. 예를 들어 1개를 기준으로 자른다고 했을 때,'a', 'a', 'b', 'b', 'a', 'c', 'c', 'c'
가 stack에 담기고 이를 다시 result에 담는다.- num이 문자열의 길이 + 1가 되면 while문을 빠져나온다.
- result에 담긴 배열 각각을 answer라고 한다. 만약 answer가
['a', 'a', 'b', 'b', 'a', 'c', 'c', 'c']
라면 반복문을 돌면서 index와 index+1이 같은 것을 묶어 준다. 해당 예시에서 new에는[['a', 'a'], ['b', 'b'], ['a'], ['c', 'c', 'c']]
이 담긴다. - new_str은
2a2ba3c
가 된다. s의 길이는 1000이하임으로 kikiki에 s의 길이를 할당하고, 만약 new_str의 길이가 kikiki보다 작다면 new_str을 할당한다.
Author And Source
이 문제에 관하여([알고리즘] 프로그래머스 2단계 문자열 압축), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@minidoo/알고리즘-프로그래머스-2단계-문자열-압축저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)