
문자열을 입력받아서, 같은 문자가 연속적으로 반복되는 경우에 그 반복 횟수를 표시하여 문자열을 압축하기.
입력 예시: aaabbcccccca
출력 예시: a3b2c6a1
# 1. 문자를 입력받아 a,a,a,b,b,c,c,c,c 를 처음 문자를 입력받아 다를때까지 count를 센다
# 2. 저장 후 문자와 숫자를 리스트에 저장한다. 예 a3
# 만약 처음 받은 숫자를 받아 같은 숫자가 몇개인지 확인
a= str(input())
def str_press(a):
save_text = []
count = 0
for i,j in enumerate(a):
#시작할때 처음 문자를 저장
if i ==0:
text = j
#저장한 문자와 리스트 문자가 다르면 값을 리스트에 저장
#text가 다르면 count를 0으로 만들고 다른 문자를 저장
#다른 문자를 다시 저장함
if text != j:
save_text.append(f'{text}')
save_text.append(str(count))
count = 0
text=j
count += 1
#for 문이 끝나고 마지막에 값이 저장이 안되 따로 text와 count를 저장
save_text.append(f'{text}')
save_text.append(str(count))
# String.join()으로 리스트의 모든 요소들을 하나의 문자열로 변환
# join()을 이용하면 다음과 같이 리스트를 문자열로 변환할 수 있다.
text_out = ''.join(save_text)
return text_out
#함수 실행
print(str_press(a))
>>> 입력 : aaabbcccccca
>>> 출력 : a3b2c6a1
#------------다시 짠 코드---------------
a= str(input())
def str_press(a):
save_text = ''
count = 0
for i,j in enumerate(a):
if i ==0:
text = j
if text != j:
save_text += text + str(count)
count = 0
text=j
count += 1
save_text += text + str(count)
return save_text
print(str_press(a))
s = "aaaabbbcczzzza"
#초기값을 설정합니다.
result = s[0] #반복문 실행되는 동안 문자열 형태로 반환되는 결과들을 담을 변수
count = 0 #반복되서 나오는 문자 수만큼 카운팅되는 값을 담을 변수
for i in s:
if i == result[-1]: #result변수 마지막 문자와 비교합니다. else에서 result변수에 값이 추가되기 때문에 마지막 문자[-1]와 비교.
count += 1
else:
result += str(count) + i #마지막 글자와 i가 다를 경우 카운팅된 값을 문자열 형태로 result 변수 마지막에 추가 해주고 i를 마지막 문자로 추가합니다.
count = 1
result += str(count) #결과들이 담긴 변수에 마지막으로 카운팅된 값을 문자열 형태로 추가합니다.
print(result)
이번 코딩을 보면서 처음 값을 저장한뒤 뒤에서부터 숫자와 문자를 추가하고 맨뒤 문자를 비교한다는 생각을 못했고, 문자를 저런식으로 더할수도 있구나란 생각이 들었다. 아직은 문자열과 코딩이 익숙 하지않아 코드를 더 복잡하게 만드는것 같다. 그래도 리스트에서 문자열로 변경을 할때 text_out = ''.join(save_text) 를 사용하여 앞으로 유용하게 사용할 수 있을것 같다
'구분자'.join(리스트)
.join(리스트)를 이용하면 매개변수로 들어온 [’a’,’b’,’c’] 이런 식의 리스트를 ‘abc’의 문자열로 합쳐서 반환해주는 함수