본문 바로가기

리트코드/midium

[리트코드] 394. Decode String - js

반응형

1. 문제

https://leetcode.com/problems/decode-string/

 

Decode String - LeetCode

Can you solve this real interview question? Decode String - Given an encoded string, return its decoded string. The encoding rule is: k[encoded_string], where the encoded_string inside the square brackets is being repeated exactly k times. Note that k is g

leetcode.com

2. 코드

/**
 * @param {string} s
 * @return {string}
 */
var decodeString = function(str) {
    let stack = [];
    let curStr = '';
    let curNum = 0;

    for (let i = 0; i < str.length; i ++) {
        if (str[i] === '[') {
            stack.push(curStr);
            stack.push(curNum); // 이전 값 넣고,
            curStr = '';
            curNum = 0; // 새로운 값 저장 준비([] 내 [])
        } else if (str[i] === ']') {
            let prevNum = stack.pop();
            let prevStr = stack.pop();
            curStr = prevStr + curStr.repeat(prevNum);
        } else if (!isNaN(str[i])) {
            curNum = `${curNum}${str[i]}`; // 숫자가 문자열 내에서 문자로 쭉 이어져있기 때문에 연결
        } else {
            curStr += str[i];
        }
    }

    return curStr;
}

문제를 딱 보면 재귀인데.. 어떻게 코드를 짜야할지 느낌이 잘 안오는 문제인 것 같다. 처음에는 재귀함수를 사용했는데, 상황이 너무 다양해서 예외 사항을 모두 포함하려면 조건을 무지 많이 써줘야했다... 스택이 정답이였구나...

반응형