문제
문자열 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}")
코드 실행 결과입니다.
'CS > Python' 카테고리의 다른 글
[Python] 으뜸파이썬 6장 연습문제 20번 : list ➡ tuple, zip() 함수 활용 (0) | 2022.04.21 |
---|---|
[Python] Sequence 자료형(튜플, 딕셔너리, 집합), zip() 함수 (0) | 2022.04.19 |