<aside>
💬 lv1
, 문자열 처리
, 압축
주어진 문자열에서 연속적으로 반복되는 문자를 압축하여 표현하는 코드를 작성해주세요. 예를 들어, "aaabbccccdaa" 문자열은 "a3b2c4d1a2"로 압축됩니다. 각 문자 뒤에는 해당 문자가 연속으로 나타난 횟수를 표시합니다.
입력 (문자열) | 출력 (압축된 문자열) |
---|---|
"aaabbccccdaa" | "a3b2c4d1a2" |
"abcd" | "a1b1c1d1" |
"eeeeeee" | "e7" |
문자열에서 연속적으로 반복되는 문자를 찾아, 그 문자와 반복 횟수를 함께 표현합니다. 예를 들어, "abcd"는 각 문자가 1번씩 나타나므로 "a1b1c1d1"로 압축됩니다.
</aside>
def solution(data):
text = data[0] **#1 변수 설정 및 데이터 처리 준비**
compressed = []
count = 1
for i in range(1, len(text)): **#2 문자열 처리**
if text[i] == text[i - 1]:
count += 1
else:
compressed.append(text[i - 1] + str(count))
count = 1
compressed.append(text[-1] + str(count)) **#3 마지막 문자 처리**
return "".join(compressed) **#4 최종**
변수 설정 및 데이터 처리 준비
text = data[0]
입력된 리스트 data
의 첫 번째 요소를 text
변수에 할당합니다.
이렇게 해주는 이유는 pyalgo 에서 매개변수 data
에 문자열이 바로 오지 않고, 리스트의 형태로 전달되어서 문자열로 다시 만들어 주기 위한 변수 설정입니다.
compressed = []
→ 압축된 문자열을 저장할 빈 리스트를 초기화합니다.
count = 1
→ 현재 검사 중인 문자가 반복되는 횟수를 세는 변수입니다. 첫 문자부터 검사를 시작하므로 초기 값은 1
입니다.
문자열 처리
count
를 1
증가 시킵니다. text[i - 1]
구문 때문에 두 번째 문자부터 for
문을 반복하는 것이 필요했습니다.compressed.append(text[i - 1] + str(count))
→ 이전에 반복되던 문자와 그 횟수를 문자열로 만들어 compressed
리스트에 추가합니다.count = 1
→ 반복 횟수를 다시 1
로 초기화합니다. 새로운 문자의 반복 횟수를 세기 위함입니다.마지막 문자 처리
반복문이 끝난 후, 마지막 문자와 그 반복 횟수를 처리합니다. for
문의 조건을 벗어나면 if-else
문을 실행하지 못하기 때문에 그 시점까지 문자와 카운트 된 숫자를 한번 더 더해줘야 합니다.
최종
compressed
리스트에 저장된 문자열들을 연결하여 최종 문자열을 만들고 반환합니다.
문자열 자체를 순회하면서 비교하기 위해서는 for
문을 어떻게 구성 하는 지가 중요합니다. 인덱스에 사용할 값을 위해 for
문을 사용할 때 가장 조심해야 하는 것이 인덱스 오류입니다.
기존대로 0번째 인덱스부터 비교를 하면 인덱스 오류가 나기 쉽습니다.
for i in range(1, len(text)):
if text[i] == text[i - 1]:
count += 1
else:
compressed.append(text[i - 1] + str(count))
count = 1
for i in range(1, len(text))
에서 for
문을 0
이 아니라 1
에서 시작해야 합니다.
if text[i] == text[i - 1]
다음과 같은 if
문을 사용할 때 0
부터 시작하면 text[0] == text[-1]
이라 인덱스 오류가 납니다.
count
함수 활용def solution(data):
data = data[0] **#1 변수 설정 및 데이터 처리 준비**
curr = [data[0]]
ret = ""
for s in data[1:]: **#2 문자열 처리**
if s not in curr:
ret += str(curr[0]) + str(curr.count(curr[0]))
curr = []
curr.append(s)
ret += str(curr[0]) + str(curr.count(curr[0])) **#3 마지막 문자 처리**
return ret **#4 최종**
변수 설정 및 데이터 처리 준비
입력된 리스트 data
의 첫 번째 요소를 data
변수에 할당합니다. 이렇게 해주는 이유는 pyalgo 에서 매개변수 data
에 문자열이 바로 오지 않고, 리스트의 형태로 전달되어서 문자열로 다시 만들어 주기 위한 변수 설정입니다.
curr = [data[0]]
→ 문자열의 첫 번째 값을 리스트 curr
에 넣어줍니다. 항상 같은 문자열이 더해지는 리스트입니다.
ret = ""
→ 반환할 결과 값을 저장할 문자열 변수 입니다.
문자열 처리
반복문을 통해 문자열의 두 번째 문자부터 마지막 문자까지 반복하여 검사합니다.
if s not in curr
→ 변수 설정에서 해줬던 리스트 curr
안에 첫 번째 인덱스 문자 s
가 포함이 안되어 있다면 if
문 안을 실행합니다.
ret += str(curr[0]) + str(curr.count(curr[0]))
→ if
문 안으로 들어왔다면 같은 문자의 반복이 끝났다는 의미입니다.
반환할 결과 문자열 변수 ret
안에 curr
의 0번째 인덱스의 문자, 반복이 끝난 문자를 더해주고, 리스트 curr
에 curr
0번째 인덱스의 문자의 수를 체크해서 더해줍니다.
어차피 같은 문자들만 curr
로 들어오기 때문에 str(len(curr))
해줘도 되지만 더 확실한 체크를 위해 리스트 안에 해당 문자의 수를 세줍니다.
리스트 curr
의 역할은 끝났으니 curr = []
로 초기화 해줍니다.
curr.append(s)
if
문 안을 실행했다면curr
은 빈 리스트이고, if
문 안을 실행하지 않았다면 그 문자는 curr
리스트에 더해집니다.