점프 투 파이썬 종합문제 - 문자열 압축 질문
def compress_string(s):
_c = ""
cnt = 0
result = ""
for c in s:
if c!=_c:
_c = c
if cnt: result += str(cnt)
result += c
cnt = 1
else:
cnt +=1
if cnt: result += str(cnt)
return result
print (compress_string("aaabbcccccca"))
종합문제 를 풀던중 해답을 보게되었는데 해답 코드가 이해가 되지 않습니다 ㅠㅠ
혹시 한줄 한줄 그 의미를 알 수 있을까요 ? 문제를 못푸는건 그렇다해도 해답 코드 조차 이해가 안되서 자괴감이 드네요 ㅠㅠ
david 님 612
M 2020년 11월 15일 8:30 오전
1개의 답변이 있습니다. 1 / 1 Page
안녕하세요.
해답에서 사용한 변수들이 좀 불친절한 변수명으로 되어 있어서 이해하기가 쉽지 않으셨을 겁니다.
해답에 좀 더 쉬운 변수명과 적절한 주석을 사용해야 겠네요.
해당 라인마다 주석을 달았습니다.
도움이 되시기를 바랍니다.
def compress_string(s):
_c = "" # s 문자열중 현재 진행중인 문자를 임시저장하기 위한 변수
cnt = 0 # 해당 문자가 몇 번 반복했는지 알 수 있는 카운트 변수
result = "" # 이 함수의 최종 리턴 문자열 (예: a3b2c5a1)
for c in s: # 입력받은 문자열 s에서 문자 하나씩 c에 대입
if c!=_c: # 현재 진행중인 문자와 c가 같지 않은 경우, 즉 새로운 문자의 시작
_c = c # 현재 진행중인 문자와 같지 않으므로 현재진행문자는 c로 대입
if cnt: result += str(cnt) # 새로운 문자이므로 결과 문자열에 이전 문자의 카운트(있을 경우에만)에 해당하는 값을 더해 주어야 함
result += c # 새로운 문자이므로 결과문자열에 새로운 문자를 더함
cnt = 1 # 새로운 문자이므로 카운트는 1로 초기화
else: # 현재 진행중인 문자와 c가 같기 때문에 카운트가 증가됨
cnt +=1
if cnt: result += str(cnt) # for loop를 벗어낫을때 이전 문자의 카운트는 최종적으로 한번 더해주어야함
return result # 최종문자열 리턴
print (compress_string("aaabbcccccca"))
박응용 님
M 2020년 11월 15일 9:48 오전