🔍 알고리즘/프로그래머스 Python
[Python] 프로그래머스 60057.문자열압축 (Lv.2)
탄치
2022. 6. 4. 11:43
https://programmers.co.kr/learn/courses/30/lessons/60057
코딩테스트 연습 - 문자열 압축
데이터 처리 전문가가 되고 싶은 "어피치"는 문자열을 압축하는 방법에 대해 공부를 하고 있습니다. 최근에 대량의 데이터 처리를 위한 간단한 비손실 압축 방법에 대해 공부를 하고 있는데, 문
programmers.co.kr
https://nodingco.tistory.com/50
[JAVA] 프로그래머스 60057.문자열압축 (Lv.2)
https://programmers.co.kr/learn/courses/30/lessons/60057 코딩테스트 연습 - 문자열 압축 데이터 처리 전문가가 되고 싶은 "어피치"는 문자열을 압축하는 방법에 대해 공부를 하고 있습니다. 최근에 대량의 데.
nodingco.tistory.com
접근 방법은 위의 JAVA 풀이에서 확인할 수 있습니다.
Python에서 String을 List로 바꿔주는 메소드는 split()이나 List의 생성자인 list()를 이용하면 됩니다. Python의 경우엔 정수 나눗셈의 몫을 구하고 싶을때 // 연산자를 활용할 수 있습니다.
def solution(s):
# strArr = s.split('')
strArr = list(s)
answer = len(strArr)
for i in range(1, len(strArr)//2 + 1):
count = i
idx = 0
duple = 0
for now in range(i, len(strArr) - (len(strArr) % i), i ):
flag = True
for j in range(0, i):
if (strArr[idx + j] != strArr[now + j]):
flag = False
break
if (flag):
if(duple == 0):
duple = 2
else:
duple +=1
else :
idx = now
if (duple // 100 != 0):
count += 3
elif (duple // 10 != 0):
count += 2
elif (duple != 0):
count+=1
count += i
duple = 0
if(duple // 100 != 0):
count += 3
elif (duple // 10 != 0):
count += 2
elif (duple != 0):
count+=1
duple = 0
answer = min(answer, count + (len(strArr) % i))
return answer
input = ["aabbaccc","ababcdcdababcdcd","abcabcdede","abcabcabcabcdededededede","xababcdcdababcdcd"]
for i in range(5):
print(solution(input[i]))
728x90