LeetCode 394. Decode String

펭도리·2021년 5월 4일
0

LeetCode

목록 보기
1/4
post-thumbnail

match 메서드

match 메서드는 배열을 반환한다.

<Example>
let string = "a1b2c3d4";

string = string.match(/[a-z]+\d/gi);

output
["a1", "b2", "c3", "d4"]

첫번째 Example1 을 나눠보기로 도전하였다.

Input: s = "3[a]2[bc]"

s.replace(/\d+\[[a-z]+\]/gi,"바뀜");

output
"바뀜바뀜"

과정은 3[a]가 바뀜으로 2[bc]가 바뀜 으로 변환된다.

전체적인 풀이를 보자

const decodeString = (s) => {
    // 숫자가 포함되어 있으면 반복되는 while 로직
    while(s.match(/\d/gi)) { 
        s = s.replace(/\d+\[[a-z]+\]/gi, (value) => { //3[acc]
           const repeatNumber = Number(value.match(/\d+/gi)[0]);  // 2     3
           // [] 앞 숫자를 추출
           const internalStr = value.match(/[a-z]+/gi);           // c     acc
           // [] 안 알파벳 추출
           return internalStr[0].repeat(repeatNumber);            // cc    accaccacc
        });
    }
    return s;
};

Example2를 혼동하는 사람들이 좀 있는데 중복되어있는데 어떻게 이러한 정규표현식이 참이 되느냐 라고 물어보는 질문을 많이 받았다.
자세히보면 우리는 replace(/\d+[[a-z]+]/gi)로 찾고있다. 결국 숫자[알파벳] 을 찾고있는 것이지 숫자[알파벳 + 숫자[알파벳]]을 찾고있는것이 아니다 따라서 괄호 안의 숫자[알파벳]을 먼저 해결한 후 그밖의 괄호를 처리하게된다.

profile
풀스택 개발자가 되고싶은 코린이 이한글

0개의 댓글