우기의 알 블로그 저자 한승욱이라고 합니다.
스스로 알을 깨고 나오는 새처럼
언젠가 알을 깨고 온전한 나 자신이 되었을 때, 그때를 기다리며 제 속에서 솟아 나오는 것을 글로써 표현하고자 합니다.
'개발 기술블로그'를 위주로 저 한승욱의 다양한 관심사, 생각, 철학 등을 포스팅합니다.
# 코드 스니펫input="abcabcabcabcdededededede"defstring_compression(string):returnprint(string_compression(input))# 14 가 출력되어야 합니다!
어떻게 압축하면 제일 많이 압축될까?(즉 가장 짧게 될까)
길이를 1로 잘라야할지, 2로 잘라야할지, n으로 잘라야할지 패턴을 봐야하는 것이다.
방법론으로 스택을 선택하는 사람도 있을 것이고 재귀함수를 선택하는 사람도 있겠지만,
모든 경우에서 가장 압축을 많이 시키는 경우를 찾는 것이므로, 모든 경우를
다 보는 구조가 가장 유용할 것이다.
중요한 것은 아무리 압축을 잘해도 반절 이상은 압축할 수가 없다.
반이 넘어가면 똑같은 게 반복이 될 수 없기 때문이다.
n//2 이상부터는 쪼갤 필요가 없다.
# 정답input="abcabcabcabcdededededede"defstring_compression(string):
n =len(string)
compression_length_array =[]for split_size inrange(1, n //2+1):
splited =[]
compressed =""# for i in range(0, n, split_size):# splited.append(string[i: i+split_size])# 위 문장을 더 멋지게
splited =[
string[i: i + split_size]for i inrange(0, n, split_size)]# 압축할 수 있는 여부 알기
count =1# 카운트의 초기값은 1이여야함 이전값과 자기값을 비교하는 것이기 때문에for j inrange(1,len(splited)):# 1부터인 이유는 이전값이랑 지금값이랑 비교하기 위함
prev, cur = splited[j-1], splited[j]if prev == cur:
count +=1else:if count >1:# 2개 이상부터는 압축해주는 것이 좋음
compressed +=(str(count)+ prev)else:# 1개라면 압축할 필요없이 추가
compressed += prev
count =1# 꼬다리 처리(남은 것 처리)if count >1:
compressed +=(str(count)+ splited[-1])else:
compressed += splited[-1]
compression_length_array.append(len(compressed))returnmin(compression_length_array)print(string_compression(input))# 14 가 출력되어야 합니다!
알고리즘 실전 - 2020 카카오 신입 개발자 블라인드 채용 1차 코딩테스트 - 1
문자열 압축
어떻게 압축하면 제일 많이 압축될까?(즉 가장 짧게 될까)
길이를 1로 잘라야할지, 2로 잘라야할지, n으로 잘라야할지 패턴을 봐야하는 것이다.
방법론으로 스택을 선택하는 사람도 있을 것이고 재귀함수를 선택하는 사람도 있겠지만,
모든 경우에서
가장 압축을 많이 시키는
경우를 찾는 것이므로, 모든 경우를 다 보는 구조가 가장 유용할 것이다.중요한 것은 아무리 압축을 잘해도
반절
이상은 압축할 수가 없다.반이 넘어가면 똑같은 게 반복이 될 수 없기 때문이다.
n//2 이상부터는 쪼갤 필요가 없다.
'기술개발 > Algorithm' 카테고리의 다른 글