스트링 디코드 문제에서 망하고, 43분 후 복수에 성공한 이야기 (feat. 중첩 괄호도 처리함)


## 🔧 배경

얼마 전 기술 면접을 보다가 `decodeString` 문제를 받았습니다.  
알고리즘 공부는 주로 BFS, DFS 쪽만 하던 터라, 문자열 파싱 문제에서 완전히 발목 잡혔습니다.  
거기다 라이브 코딩. 제한 시간 30분.

당연히… 못 풀었죠. 멘탈까지 디코딩당한 날이었습니다.

---

## 🔥 복수의 시작

면접이 끝난 뒤에도 이 문제는 계속 머릿속을 맴돌았습니다.  
“내가 이걸 못 풀었다고? 진짜?”  
그 순간부터 **마음속의 디버거**가 켜졌고, 라이브 코딩에서 시도했던 방식에서 출발해 다시 파기 시작했습니다.

스택도 쓰지 않았습니다.  
재귀도 쓰지 않았습니다.  
그냥 제 방식대로, 끈질기게 문자열을 조작하면서 풀었습니다.

**걸린 시간: 추가 43분.**

---

## 🧠 접근 방식 요약

- `[`와 `]`를 찾는다. 가장 안쪽 괄호부터 시작.
- 그 안의 문자열을 꺼내고, 반복 횟수를 계산한다.
- 원래 문자열 배열을 `splice`로 조작해서 새로운 문자열을 삽입한다.
- 그리고… **처음부터 다시 돌린다.**
- 이걸 괄호가 다 없어질 때까지 반복한다.

사실상 **재귀를 흉내 내는 루프 기반 수동 파서**입니다.

---

## ✅ 최종 코드 (with 주석)

```javascript
/**
 * @param {string} s
 * @return {string}
 */
var decodeString = function(s) {
    const strArr = s.split('');

    let startIndex = -1;
    let endIndex = -1;

    for(let i = 0; i < strArr.length; i++) {
        if(strArr[i] === '['){
            startIndex = i;
        }
        else if(strArr[i] === ']'){
            endIndex = i;
        }

        // 가장 안쪽에서부터 괄호 풀기
        if(startIndex >= 0 && endIndex >= 0 && endIndex > startIndex){
            const addedStr = strArr.slice(startIndex + 1, endIndex).join('');
            let newStr = '';
            let startNumIndex = 0;

            // 반복해야하는 숫자 구하기
            for(let j = startIndex - 1; j >= 0; j--){
                if(strArr[j] === '' || isNaN(Number(strArr[j]))){
                    startNumIndex = j + 1;
                    break;
                }
            }

            const repeatNumString = strArr.slice(startNumIndex, startIndex).join('');
            const repeatNum = Number(repeatNumString);

            for(let j = 0; j < repeatNum; j++){
                newStr += addedStr;
            }

            // 문자열 치환
            strArr.splice(startNumIndex, endIndex - startNumIndex + 1, newStr);

            // 상태 초기화 후 처음부터 다시 순회
            startIndex = -1;
            endIndex = -1;
            i = 0;
        }
    }

    return strArr.join('');
};
                                         
```

Comments

Popular posts from this blog

Operating System Concepts 9th

스티키 헤더 여러개 만들기 (Multiple sticky header)

Operating System Concept