CS/Python

[Python] 으뜸파이썬 5장 연습문제 20번 : 문자열 압축

아이스얼그레이 2022. 4. 21. 12:18

문제

문자열 src가 'aaaabbb'와 같을 경우, 이를 압축하는 방법으로 'a4b3'와 같이 문자와 그 반복 횟수를 표시하는 방법이 있다. 문자열 'aaaabcccaaaaacccfg'은 'a4b1c4a5c3f1g1'으로 압축하는 코드를 작성하시오.

입력

src = 'aaaabbb'

src = 'aaaabccccaaaaacccfg'

출력

output = 'a4b3'

output = 'a4b1c4a5c3f1g1'

 

풀이

처음에 감을 못 잡아서 많이 헤맸던 문제입니다. 코드를 보고 나면 금방 이해가 되는 생각보다 간단한 문제였습니다.

 

핵심은 output[-1] 즉, ✔output의 맨 마지막 문자를 판별하는 것입니다. output[-1]을 계속 문자로 만들면서 src의 문자를 차례대로 비교합니다. src의 문자가 바뀌는 순간에 앞선 문자의 개수를 셌던 count를 str()로 형변환해서 output에 더해주고, ✔조건을 만족시키기 위해 그다음 문자를 바로 더해줘야 합니다.

 

코드는 다음과 같습니다.

src = input("문자를 입력하세요 : ")
print(f"src = {src}")
output = src[0]
cnt = 0

for char in src:
    if output[-1] == char:
        cnt += 1
        # 문자의 개수 counting
    else:
        output += str(cnt) + char
        # cnt와 char 순서대로 더해줘야합니다. 안그러면 output의 마지막이 숫자로 끝나서
        # 의도한 동작을 하지 않습니다.
        cnt = 1
        # 새로운 문자 cnt 초기화

output += str(cnt)
# 반복문 탈출 후 마지막 문자의 개수 더해줌

print(f"output = {output}")

 

코드 실행 결과입니다.