본문 바로가기

프로그래밍/파이썬

[파이썬] 문자열 압축하기


문자열을 입력 받아 같은 문자가 연속적으로 반복되는 경우에 그 반복 횟수를 표시해 문자열을 압축하여 표시해 보자.


입력 예시 : aaabbcccccca

출력 예시 : a3b2c6a1



def zip(sentence):
count = 0 # 문자를 세기 위한 변수
next = "" # sentence가 달라지는 곳을 감지하는 수단
result = "" # 결과를 저장하는 공간
for i in sentence:
if next != i:
next = i
if count:
result += str(count)
result += i
count = 1
else:
count += 1
if count:
result += str(count)
return result


첫번째 for문은 파라미터(parameter)로 전달받은 문장을 하나씩 출력한다.

a, a, a, b, b, c, c, c, c, c, c, a가 된다.

1. if next != i:
2. next = i
3. if count:
4. result += str(count)
5. result += i
6. count = 1
7. else:
8. count += 1

 next = ""는 문자열이 달라지는 순간을 점검한다. 

맨 처음에 들어오는 i는 a이다.


1번줄 : if next != i


next = " " 

맨 처음 i = a


next != i 이기 때문에 if문 안으로 들어간다.


2번줄 : next = i

next는 a가 된다.


3번줄~ 4번줄 

    if count:

result += str(count)


count = 0이기 때문에 if는 False가 된다. 따라서 3번줄과 4번줄은 건너뛴다.


5번줄 : result += i

result는 빈 공백("")인데, a가 추가된다.


6번줄 : count = 1

여기서부터 count가 매겨지게 된다.


다음은 next == a이기 때문에 else문으로 넘어간다. 그래서 count는 2가 된다.

다음은 next == a이기 때문에 또 else문으로 넘어간다. 그래서 count는 3이 된다.


4번줄

  b의 차례가 오면 next != b이기 때문에 if문으로 들어간다. 

  이때 count는 3이기 때문에 if count:는 True가 된다.

  그다음 셌던 count를 result에 붙여버린다. 그래서 a3이 된다.