입력된 문자열에서 소괄호 ( ) 사이에 존재하는 모든 문자를 제거하고 남은 문자만 출력
▣ 입력예제
(A(BC)D)EF(G(H)(IJ)K)LM(N)
▣ 출력예제
EFLM
풀이
function solution(s) {
let answer = "";
const stack = [];
for (let x of s) {
if (x === "(" || (stack.includes("(") && x !== ")")) stack.push(x);
else if (!stack.includes("(") && x !== ")") answer += x;
else if (x === ")") {
if (stack.length === 0) return "잘못된 입력"; // 소괄호도 모든 문자에 속하는거라면 굳이 처리 안해도 될 듯
let i = 1;
while (1) {
if (stack[stack.length - i] === "(") {
stack.pop();
break;
} else {
stack.pop();
}
}
}
}
if (stack.length > 0) return "잘못된 입력";
return answer;
}
let str = "(A(BC)D)EF(G(H)(IJ)K)LM(N)";
console.log(solution(str));
강사 풀이
function solution2(s) {
let answer;
let stack = [];
for (let x of s) {
if (x === ")") {
while (stack.pop() !== "("); // '(' 만날때까지 pop
} else stack.push(x); // ')'가 아니면 push
}
answer = stack.join("");
return answer;
}
let str = "(A(BC)D)EF(G(H)(IJ)K)LM(N)";
console.log(solution2(str));
'코딩테스트 문제풀이 > inflearn' 카테고리의 다른 글
[인프런] Node.js / 섹션6-자료구조(스택) / 4. 후위식 연산(postfix) (0) | 2023.02.10 |
---|---|
[인프런] Node.js / 섹션6-자료구조(스택) / 3. 크레인 인형뽑기(카카오 기출) (0) | 2023.02.10 |
[인프런] Node.js / 섹션6-자료구조(스택) / 1. 올바른 괄호 (0) | 2023.02.08 |
[인프런] Node.js / 섹션5-효율성(해시&슬라이싱 윈도우&투포인터 알고리즘) / 8. 모든 아나그램 찾기 (0) | 2023.02.08 |
[인프런] Node.js / 섹션5-효율성(해시 알고리즘) / 7. 아나그램 (0) | 2023.02.08 |