본문 바로가기
Python/코딩도장 풀이 모음

[코딩도장] [Lv.2] 문자열 압축하기

by Dailybook406 2022. 6. 11.

[ 문제 ]

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

입력 예시: aaabbcccccca

출력 예시: a3b2c6a1

 

[ 풀이 ]

# My solution
word = input()    #1

count = 1    #2
result = []

for i in range(len(word)) :    #3
    if i == len(word)-1 :    #4
        result.append(word[i])
        result.append(count)
    else :
        if word[i] == word[i+1] :
            count += 1
        else :
            result.append(word[i])
            result.append(count)
            count = 1

print(''.join(map(str,result)))    #5

실행결과

# 입력1
aaabbcccccca
a3b2c6a1    # 출력값1

# 입력2
aabbbcddaaww
a2b3c1d2a2w2    # 출력값2
더보기
# 베스트 풀이 방법
파이썬 2.7


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

#1

변수(word)를 만든 후, 문자열을 입력받는다.

 

 

#2

입력받은 문자열(word)에서, 연속적으로 반복되는 문자를 판단하여 개수를 셀 때 사용할 변수(count)를 생성한다.

이때 반복되지 않는 문자일지라도 갯수를 셀 수 있도록 기본값을 1로 생성한다.

 

word 속의 문자 중, 반복되는 문자와 해당 문자의 갯수를 차례로 저장할 수 있도록 비어있는 리스트(result)를 생성한다.

 

 

#3

for 반복문을 이용하는데, 이때 len() 함수를 이용하여 word의 문자 개수만큼 범위를 설정함으로써 word 속 문자들을 하나씩 판별하도록 한다.

 

 

#4

word 속 각각의 문자를 판단할 때 두 가지 경우로 나누어서 생각할 수 있다.

 

1) 만일 반복문이 마지막인 경우(판단하는 문자가 문자열의 마지막 문자인 경우)

 

이번 문제의 코드를 만들 때, 각 문자를 바로 뒤에 있는 문자와 비교하여 같은 문자가 연결되는지 판단하도록 프로그래밍하였기 때문에, 마지막 문자는 결과를 바로 리스트에 추가하도록 따로 조건을 설정한다.

 

for반복문에서 반복되는 변수 i가 len(word)-1 과 같다면 반복문의 마지막이라는 것을 알 수 있다.(range()에 단독으로 값을 넣을 경우 0부터 '입력값-1'까지 범위를 설정하기 때문)

 

결과를 추가할 때는 extend메소드를 이용하여 [판단한 문자(word[i]), 해당 문자의 갯수(count)]를 result에 추가해준다.

 

2) 만일 반복문의 마지막이 아닌 경우(판단하는 문자가 마지막 문자가 아닌 경우)

이 경우 역시 같은 문자가 연속되는 문자인지, 연속되지 않는 문자인지 두 가지로 나눌 수 있다.

 

만일 판단하는 문자가 뒤의 문자와 같은 경우(if word[i] == word[i+1]), count에 1을 더한다.

 

만일 판단하는 문자가 뒤의 문자와 다른 경우, 결과를 result에 추가해준다.

역시나 extend메소드를 통해 해당하는 문자와 그 문자의 개수를 추가해준다.

 

 

#5

마지막으로 입력된 결과(result)를 출력하면 된다.

출력할 때는 join()함수를 이용하여 리스트 속 매개변수들을 붙여서 한 번에 출력한다.

 

이때 주의해야 할 점이 있는데, join()함수는 문자열에만 사용할 수 있다.

따라서 result 속에 입력된 count값들은 숫자로 입력되어 있기 때문에 map()함수를 이용하여 별도로 result 속 매개변수들을 문자열로 바꾸어준다.

 


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

 

코딩도장

프로그래밍 문제풀이를 통해서 코딩 실력을 수련

codingdojang.com

 

댓글