반응형
1. 문제
https://leetcode.com/problems/decode-string/
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;
}
문제를 딱 보면 재귀인데.. 어떻게 코드를 짜야할지 느낌이 잘 안오는 문제인 것 같다. 처음에는 재귀함수를 사용했는데, 상황이 너무 다양해서 예외 사항을 모두 포함하려면 조건을 무지 많이 써줘야했다... 스택이 정답이였구나...
반응형
'리트코드 > midium' 카테고리의 다른 글
[리트코드] 1143. Longest Common Subsequence - js (DP) (0) | 2023.08.25 |
---|---|
[리트코드] 200. Number of Islands - js (DFS) (0) | 2023.08.24 |
[리트코드] 17. Letter Combinations of a Phone Number - js (DFS) (0) | 2023.08.21 |
[리트코드] 875. Koko Eating Bananas - js (이진탐색) (0) | 2023.08.20 |
[리트코드] 287. Find the Duplicate Number - js (0) | 2023.08.20 |