[programmers 60057] 2020 공채 1번 문자열압축

문제

[programmers 60057] 문자열 압축

코드

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가 통과하지 않았다.
힌트를 보고 어디를 잘못짰는지 금방 찾을 수 있었지만, 실전이었다면 엄청 헤맸을 것 같다.

좋은 웹페이지 즐겨찾기