점프 투 파이썬 종합문제 - 문자열 압축 질문
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 오전

+1 주석 감사합니다 - 쿠우아저씨님, 2020년 11월 16일 2:40 오후 추천 , 대댓글