본문 바로가기
Python

문자열 압축

by soojitasan 2024. 7. 1. 22:43
''' 2
문제 : 문자열 압축

주어진 문자열에서 반복되는 문자들을 압축하여 새로운 문자열을 반환하는 함수를 작성하시오. 예를 들어, 입력이 "aaabbcccc"인 경우 "a3b2c4"로 변환하시오.
조건: 압축된 문자열의 길이가 원래 문자열보다 길어질 경우 원래 문자열을 반환하시오.
'''
txt = input()
cnt = {}
fin = str()

## 문자열 하나씩 쪼개서 딕셔너리에 카운트 값 저장
for i in txt:
  if i in cnt:
    cnt[i] = cnt[i] +1
  else:
    cnt[i] = 1

## 딕셔너리 값 합쳐서 출력
key = ''.join((list(cnt.keys())))
val = ''.join(map(str, list(cnt.values())))

for i in range (0, len(key)):
  full_txt = key[i] + val[i]
  fin = fin + full_txt

## 딕셔너리 값 합쳐서 출력한 게 더 길면 원래 문자열 출력
if len(txt) <= len(fin):
  print(txt)
else:
  print(fin)

''' 문제점
- 연속된 문자 고려 부족: 입력 문자열에서 연속적으로 나타나는 문자들을 개별적으로 처리하지 않고, 각 문자의 전체 빈도 수만을 고려하고 있습니다.
- 딕셔너리 사용: 딕셔너리를 사용하여 각 문자의 빈도수를 저장하는 것은 좋지만, 연속적인 문자의 빈도수를 계산하는 데는 적합하지 않습니다.
- 출력 논리: 압축된 문자열의 길이가 원래 문자열보다 길 경우 원래 문자열을 반환하는 조건이 구현되어 있지만, 앞서 언급한 문제점으로 인해 정확한 압축 결과를 생성하지 못합니다.
'''