[Python] 코딩 도장 - 문자열 압축하기

Updated:

코딩 도장 사이트의 문제를 직접 풀어본 내용을 정리하여 올립니다.

코딩 도장에서 여러 문제를 확인할 수 있습니다.

난이도 순으로 차근차근 풀어보려 합니다.


[문제: 문자열 압축하기] - Lv.2

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

입력 예시: aaabbcccccca

출력 예시: a3b2c6a1

출처: https://codingdojang.com/scode/465?answer_mode=hide


[풀이]

def compress(txt):
    a = ""
    c = 0
    v = txt[0]
    for i in range(len(txt)):

        if txt[i] == v:
            c += 1
        else:
            a += v + str(c)
            v = txt[i]
            c = 1

        if i == len(txt)-1:
            a += v + str(c)

    return a

txt = "aaabbcccccca"
compress(txt)

이전 값과 동일하면 카운트를 늘리고 동일하지 않으면 여태까지 쌓인 카운트를 문자열에 더해주었다.

for문 작성시 초기 값이 필요해서 v=txt[0]로 설정하였고 이 때 카운트는 0부터 체크해야한다.

마지막의 경우 다음 루프가 작동하지 않으므로 마지막일 경우는 따로 문자열에 더해주었다.

[추천 풀이]

s = 'aabcccaaaaas'

result = s[0]  # 첫번째 값을 결과에 넣는다
count  = 0   #

for st in s:
    if st == result[-1]:  #
        count += 1
    else:
        result += str(count) + st
        count = 1
result += str(count)

print(result)
a2b1c3a5s1

이 분도 비슷한 방식이지만 else에서 달라진 문자열까지 더하는 방식을 사용하였다.

마지막의 경우 루프가 작동하지 않는 건에 대해선 for문 밖에서 추가해주는 방식을 사용했다.

Leave a comment