[programmers 60057] 2020 공채 1번 문자열압축
문제
코드
def solution(s):
answer = s[:]
# le: 압축할 길이
for le in range(1,len(s)//2+1):
result = ''
cnt = 1
# 현재 문자열과 다음 문자열을 비교해서
for st in range(0,len(s),le):
# 같으면 cnt만 증가
if s[st:st+le]==s[st+le:st+2*le]:
cnt += 1
# 다르면 현재까지 압축한 결과 붙이기
else:
if cnt>1:
result += (str(cnt)+s[st:st+le])
else:
result += s[st:st+le]
cnt = 1
if len(result)<len(answer):
answer = result[:]
return len(answer)
풀이
- 현재 문자열과 다음 문자열을 비교해서 같으면 cnt 증가시키고 다르면 현재까지 압축한 결과를 붙이기
- 마지막 문자열도 예외없이 붙일 수 있음
- 마지막 문자열이면
s[st+le:st+2*le]
이''
이므로 무조건else
로 넘어감- 마지막 문자열이 전 문자열과 같았다면
result += (str(cnt)+s[st:st+le])
이 실행될 것이고, 다르더라도result += s[st:st+le]
가 실행되므로 마지막 문자열 붙일 수 있다.
실수한 것
처음에 answer을 엉뚱하게 a*1001로 초기화해서 테스트5가 통과하지 않았다.
힌트를 보고 어디를 잘못짰는지 금방 찾을 수 있었지만, 실전이었다면 엄청 헤맸을 것 같다.
Author And Source
이 문제에 관하여([programmers 60057] 2020 공채 1번 문자열압축), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@savannah030/programmers-60057-2020-공채-1번-문자열압축저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)