[Python] 2020 KAKAO BLIND RECRUITMENT : 문자열 압축

송진영·2022년 6월 20일
0

프로그래머스-python

목록 보기
2/22

2020 KAKAO BLIND RECRUITMENT : 문자열 압축

문제 설명

제한사항

입출력 예

입출력 예에 대한 설명

문제풀이

문자열을 단위 별로 잘라서 앞과 뒤가 같은지 비교하여 count를 늘려가며 문자열을 붙여주면 된다.

  1. 첫번째 for문을 이용해 문자열을 자를 단위를 정해준다
    How : 1부터 (len(문자열) // 2)까지, range는 +1까지
    Why : 1개부터 문자열 길이의 절반이 되는 수까지의 단위로 문자열을 잘라서 비교하여 몇 개의 단위로 잘랐을 경우 가장 짧은지 알 수 있다.
    Ex : "abcabc" -> 1부터 3까지의 단위로만 잘라봐도 2abc가 가장 짧은 경우인 걸 알 수 있다.
  1. 두번째 for문을 이용해 현재 부분과 다음 부분이 같은지 비교한다.
    같을 경우 : count += 1
    다를 경우 : 누적 문자열 += str(count) + 현재 부분
  1. 첫번째 for문이 끝나고 남은 문자열을 뒤에 붙여준다.
  1. 누적 문자열의 길이를 answer과 비교하여 짧으면 갱신한다.

def solution(s):
    answer = len(s)

    for step in range(1, len(s)//2 + 1):
        prev = s[:step]
        comp = ""
        cnt = 1

        for j in range(step, len(s), step):
            nex = s[j:step+j]
            if prev == nex:
                cnt += 1
            else:
                if cnt >= 2:
                    comp += str(cnt) + prev
                else:
                    comp += prev
                cnt = 1
                prev = nex
        if cnt >= 2:
            comp += str(cnt) + nex
        else:
            comp += nex
        answer = min(answer, len(comp))

    return answer

답 풀이

s = input()
answer = len(s)

for step in range(1, len(s)//2 + 1):
    prev = s[:step]
    comp = ""
    cnt = 1
    print(step, "개 단위로 자를 경우")
    for j in range(step, len(s), step):
        nex = s[j:step+j]
        print("앞: ", prev, " 뒤: ", nex, " 비교")
        if prev == nex:
            cnt += 1
            print("앞과 뒤가 같으므로, cnt 1 증가: ", cnt)
        else:
            if cnt >= 2:
                comp += str(cnt) + prev
                print("앞과 뒤가 다르므로, 문자열 이어 붙이기: ", comp)
            else:
                comp += prev
                print("앞과 뒤가 다르므로, 문자열 이어 붙이기: ", comp)
            cnt = 1
            prev = nex
    if cnt >= 2:
        comp += str(cnt) + nex
    else:
        comp += nex
    print("마지막 문자열 이어 붙이기: ", comp)
    print("누적 문자열 길이: ", len(comp))
    answer = min(answer, len(comp))
print("가장 짧은 길이(답): ", answer)
profile
못하는 건 없다. 단지 그만큼 노력을 안 할 뿐이다.

0개의 댓글