본문 바로가기

Programming/Programmers

[프로그래머스/Python] 문자열 압축(중복체크/반복문)

 

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

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

programmers.co.kr

 

1. 잘라놓고 비교

def text_coding(s, num):
    output = len(s)
    datalist = list(map(''.join, zip(*[iter(s)]*num)))
    
    datalist.append('A') #dummy
    prev = datalist[0]
    cnt = 0
    for i in datalist:
        if prev == i:
            cnt += 1
        else:
            if cnt >= 2:
                output = output - num*cnt + len(str(cnt)) + num
            cnt = 1
            prev = i
    return output
            
            
def solution(s):
    answer = []
    for i in range(1, (len(s) // 2) + 1):
        answer.append(text_coding(s,i))
    answer.append(len(s))
    return min(answer)

 

문자열 동일한 길이로 자르기

 

datalist = [s[i : i + num] for i in range(0, len(s), num)]

 

datalist = list(map(''.join, zip(*[iter(s)]*num)))

 

2. 자르면서 비교 (빠름)

 

def text_coding(s, num):
    tmp = len(s)
    out = []
    prev = s[0:num]
    cnt = 0
    for i in range(0,len(s),num):
        cur = s[i:i+num]
        if prev == cur:
            cnt += 1
        else:
            if cnt >= 2:
                tmp -= cnt*num 
                tmp += num + len(str(cnt))
            cnt = 1
            prev = cur
    if cnt >= 2:
        tmp -= cnt*num 
        tmp += num + len(str(cnt))

    return tmp
            
            
def solution(s):
    answer = []
    for i in range(1, (len(s) // 2) + 1):
        answer.append(text_coding(s,i))
    answer.append(len(s))
    return min(answer)