このトピック-12章:実装-文字列圧縮
6971 ワード
質問する
に答える
コード#コード#
# https://programmers.co.kr/learn/courses/30/lessons/60057
# 난이도: 중, 메모리 제한: 128MB, 2020 kakao 신입 공채 기출
def solution(s: str) -> int:
answer = len(s)
# 1개 단위(step)부터 압축 단위를 늘려가며 확인
for step in range(1, len(s)//2+1):
compressed = ''
prev = s[0:step] # 앞에서부터 step만큼의 문자열 추출
count = 1
# 단위(step) 크기만큼 증가시키며 이전 문자열과 비교
for j in range(step, len(s), step):
# 이전 상태와 동일하다면 압축 횟수(count) 증가
if prev == s[j:j+step]:
count += 1
# 다른 문자열이 나왔다면 (더 이상 압축하지 못하는 경우라면)
else:
compressed += str(count) + prev if count >= 2 else prev
prev = s[j:j+step] # 다시 상태 초기화
count = 1
# 남아 있는 문자열에 대해서 처리
compressed += str(count) + prev if count >= 2 else prev
# 만들어지는 압축 문자열이 가장 짧은 것이 정답
answer = min(answer, len(compressed))
return answer
if __name__ == '__main__':
print(solution("aabbaccc")) # 7
print(solution("ababcdcdababcdcd")) # 9
print(solution("abcabcdede")) # 8
print(solution("abcabcabcabcdededededede")) # 14
print(solution("xababcdcdababcdcd")) # 17
ソース&ハーブ
これが就職のためのコードテストwith python
github
Reference
この問題について(このトピック-12章:実装-文字列圧縮), 我々は、より多くの情報をここで見つけました https://velog.io/@cosmos/이코테-chapter12-구현-문자열-압축テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol