이번에 이것이 코딩 테스트에서 문자열 압축 문제를 풀었고 해당 문제는 프로그래머스의 문제였다.

https://programmers.co.kr/learn/courses/30/lessons/60057 

 

코딩테스트 연습 - 문자열 압축

데이터 처리 전문가가 되고 싶은 "어피치"는 문자열을 압축하는 방법에 대해 공부를 하고 있습니다. 최근에 대량의 데이터 처리를 위한 간단한 비손실 압축 방법에 대해 공부를 하고 있는데, 문

programmers.co.kr

해당 문제를 거의다 풀어갈 때, 나머지를 어떻게 더할 것인가에 대한 고민이 생겼다.

고민을 하던중 알게된 것이 아래의 코드이다.

s = 'abcdefg'
print(s[4:100])

결과

efg

해당 결과를 보기전까진 [:] 에서 오른쪽 숫자는 문자열 길이를 초과해서는 안될 것이라는 생각이 있었는데 넘어가도 최대 값 이상 안넘어가며 오류또한 나타나지 않는 결과를 얻었다. 

 

다시말해, 값이 초과하여도 상관이 없기 때문에 for문을 끝까지 돌려도 된다는 것이다.

아래 코드는 이코테 답안이다.

 

def solution(s):
	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

 

+ Recent posts