<aside> 💬 lv1, 문자열

압축 해제

문제 설명

어떤 문자열이 주어졌을 때, 문자열의 각 문자 뒤에는 해당 문자의 개수가 있습니다. 이러한 형식으로 압축된 문자열을 해제하는 프로그램을 작성해주세요.

예를 들어, 문자열 "a3b2c1"은 "aaabbbc"로 해제됩니다.

압축된 문자열 s가 매개변수로 주어질 때, 해제된 문자열을 return 하도록 solution 함수를 완성해주세요.


제한 사항


입출력 예

s result
"a3b2c1" "aaabbbc"
"a1b1c3d2e1f1" "abcccddeef"
"x2y3z1" "xxyyyzzz"
"a1" "a"
"z9" "zzzzzzzzz"

입출력 설명

😺 풀이 1. 문자열 메소드 사용

def solution(s):
    result = ""
    
    for i in range(len(s)): **#1 문자 확인과 카운트 초기화**
        if s[i].isalpha():
            char = s[i]
            count = ""
            j = i + 1
            while j < len(s) and s[j].isdigit(): **#2 숫자 추출**
                count += s[j]
                j += 1
            result += char * int(count) **#3 문자열 복원**
    
    return result **#4 결과 반환**

단계별 풀이 전략

  1. 문자 확인과 카운트 초기화

    루프를 사용하여 주어진 문자열 s를 처음부터 끝까지 순회합니다. 각 순회 시 문자가 알파벳인지 확인하고, 알파벳일 경우 해당 문자를 기록하고, 그 뒤따르는 숫자를 카운트하기 위한 빈 문자열을 초기화합니다.

  2. 숫자 추출

    현재 문자의 바로 다음 위치부터 시작하여 다음 알파벳 문자가 나타날 때까지 숫자를 추출합니다. 이를 위해 내부 루프를 사용하여 현재 위치에서부터 숫자가 연속되는 동안 숫자를 문자열 형태로 카운트 문자열에 추가합니다.

  3. 문자열 복원

    추출한 숫자(문자열 형태)를 정수로 변환하고, 해당 정수만큼 알파벳 문자를 반복하여 결과 문자열에 추가합니다. 이 과정을 모든 문자에 대해 반복합니다.

  4. 결과 반환

    모든 문자에 대한 처리가 끝나면, 생성된 결과 문자열을 반환합니다

알아둬야 할 개념

isalpha() 함수와 isdigit() 함수

풀이 2. 순차적 탐색과 문자열 생성

def solution(data):
    new_str = ''
    for idx, chr in enumerate(data): **#1 문자열 순차 탐색**
        print(idx, chr)
        if chr.isdigit(): **#2 숫자 확인 및 문자 반복**
            plus_str = data[idx-1] * int(chr)
            new_str += plus_str
        else:
            continue
    return new_str **#3 압축 해제된 문자열 생성**

단계별 풀이 전략

  1. 문자열 순차 탐색

    문자열을 순차적으로 탐색하며 각 문자와 그 인덱스를 얻습니다.

  2. 숫자 확인 및 문자 반복

    만약 현재 문자가 숫자라면, 그 숫자 바로 앞의 문자를 해당 숫자만큼 반복하여 새 문자열에 추가합니다.

  3. 압축 해제된 문자열 생성

    이 과정을 문자열의 끝까지 계속하여, 최종적으로 압축 해제된 문자열을 얻습니다.

알아둬야 할 개념