[프로그래머스]문자열 압축

jerryPark·2021년 6월 17일
0

프로그래머스

목록 보기
2/2

프로그래머스 문제 중에 문자열 관련 문제가 있어서 풀어보았습니다.
문제를 처음 보았을 때는 안 까다로울 줄 알았는데 구현하려 생각보다 고려해야할 부분이 좀 있었습니다.

문제 링크는 여기에 있습니다
https://programmers.co.kr/learn/courses/30/lessons/60057

일단 순서를 간단하게 나타내보도록 하겠습니다.
(1)문자를 count 개수 단위로 잘라내서 리스트에 저장시켰습니다.

(2)count로 저장된 리스트를 하나씩 불러오면서 전에 원소와 일치하다 싶으면 "2ab","2abc"등 이런 식으로 나타내고 아닌 경우에는 문자열을 원래대로 붙여서 수행하게했습니다.

(3)마지막으로 각 리스트의 길이를 저장하는 리스트 생성 후 append 시킨 다음, 원소들 중에서 가장 작은 값을 리턴시켰습니다.

구현하면서 몇 가지 주의사항이 있었습니다.
첫 번째는 연속적으로 중복되는 원소들만 치환할 수 있다는 점과 두 번째는 연속적으로 중복된 원소들의 경우 count가 1씩 올라가고, 새롭게 중복되는 원소가 있다면 count를 초기화해서 카운팅을 시켜야 한다는 점입니다.

1차 실패 코드

def solution(s):
    count = 0
    ls = []
    while count <= len(s):
        tp_count = 1
        result = []
        answer = ""
        tmp_ls = []
        count += 1
        # 해당 문자열을 count로 리스트로 분리해서 저장
        for idx in range(0, len(s), count):
            if len(s) % count != 0:
                if idx + count >= len(s):
                    answer = s[len(s) - (len(s) % count):]
                    result.append(answer)
                    break
            result.append(s[idx:idx + count])
        for i in range(0, len(result)):
            if i == 0:
                tmp_ls.append(result[i])
            elif result[i - 1] == result[i]:
                tp_count += 1
                tmp_ls.pop()
                tmp = str(tp_count) + result[i]
                tmp_ls.append(tmp)
            else:
                tmp_ls.append(result[i])
        ls.append(len("".join(tmp_ls)))
    return min(ls)
    

성공 코드

def solution(s):
    count = 0
    ls = []
    while count <= len(s):
        tp_count = 1
        result = []
        answer = ""
        tmp_ls = []
        count += 1
        # 해당 문자열을 count로 리스트로 분리해서 저장
        for idx in range(0,len(s),count):
            if len(s)%count==0:
                result.append(s[idx:idx + count])
            else:
                if idx + count >= len(s):
                    answer = s[len(s)-(len(s)%count):]
                    result.append(answer)
                    break
                result.append(s[idx:idx + count])
        for i in range(0,len(result)):
            if i == 0:
                tmp_ls.append(result[i])
            elif result[i-1] == result[i]:
                tp_count += 1
                tmp_ls.pop()
                tmp = str(tp_count) + result[i]
                tmp_ls.append(tmp)
            else:
                tp_count = 1
                tmp_ls.append(result[i])
        ls.append(len("".join(tmp_ls)))
    return min(ls)
```__
profile
"어제보다 더 나은 오늘의 나"

0개의 댓글