Dia Egg - Shugo Chara

Algorithm/이것이 취업을 위한 코딩테스트다

(기출 / 구현) 문자열 압축

별ㅇI 2023. 6. 7. 01:25
728x90
반응형

문자열 압축

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr


풀이

처음 구조를 어떻게 잡아야 할까 고민이 크게 되었다.

일단 1~len(s)까지 단위로 잘라서 각자의 총 길이 최소값을 비교하여 min값에 저장하고 최종적으로 저장된 min 값을 제출한다는 개념을 잡았다. 

다음으로는 남은 문자가 비교할 수 없이 짧은 경우와 비교가능한 경우로 나누고

각각을 n==1인경우와 그렇지 않은 경우로 나누어서 구현 하였다. 

어려웠다기 보다 실수 했던 점은 first와 second에 문자열을 배정하는 부분이었는데 처음에는 

fist = s[i:i+sept], second = [i+sept+1:i+sept+1+sept]로 배정했는데 생각해보니 [시작하는 부분, 끝나는 부분(-1)]까지였어서 fist = s[i:i+sept], second = [i+sept+:i+sept+sept]가 맞다는 걸 나중에 깨달았다. 그리고 break도 한번 놓쳤어서 그 부분도 제대로 기억해둬야 할 포인트 중 하나인 것같다!


코드

def solution(s):
    answer = len(s)
    result = 0
    n = 1
    for sept in range(1,len(s)):
        result = 0
        for i in range(0,len(s),sept): 
            #남은 문자가 비교할수 없이 짧은 경우
            if (i+sept*2) > len(s):
                result += len(s)-i 
                if n != 1:
                    result+= len(str(n))
                    n = 1
                break
            #남은 문자가 비교 가능한 경우
            else:
                first = s[i:(i+sept)]
                second = s[(i+sept):(i+sept+sept)]
                if first == second:
                    n += 1
                else:
                    result += len(first)
                    if n != 1 :
                        result += len(str(n))
                        n = 1
        answer = min(answer,result)

    return answer

s = input()
print(solution(s))

 

728x90
반응형