[ 문제 ]
문자열을 입력받아서, 같은 문자가 연속적으로 반복되는 경우에 그 반복 횟수를 표시하여 문자열을 압축하기.
입력 예시: 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
'Python > 코딩도장 풀이 모음' 카테고리의 다른 글
[코딩도장] [Lv.1] Special Sort (0) | 2022.07.09 |
---|---|
[코딩도장] [Lv.2] 다음 입사문제 중에서 (0) | 2022.07.02 |
[코딩도장] [Lv.1] 게시판 페이징 (0) | 2022.05.23 |
[코딩도장] [Lv.1] 완전수 구하기 (0) | 2022.05.21 |
[코딩도장] [Lv.3] Spiral Array (0) | 2022.05.14 |
댓글