괄호문자 제거(stack개념)
in Algorithm
입력된 문자열에서 소괄호 ( ) 사이에 존재하는 모든 문자를 제거하고 남은 문자만 출력하는 프로그램을 작성하세요.
Solution
function solution(s){
let answer;
let stack=[];
for(let x of s){
if(x===')'){ //s문자열이 닫는 괄호라면
while(stack.pop()!=='('); //pop한게 여는 괄호일때까지 계속해서 stack.pop()이 실행된다
//원래는 while ( stack.pop()!=='(' ) { stack.pop() } 이렇게인데 굳이 안써줘도 pop실행됨
}else stack.push(x); //s문자열이 여는 괄호이거나 문자라면 stack에 넣어준다
}
answer=stack.join(''); //배열로 오기때문에 join을 써서 문자열로 바꿔준다
return answer;
}
let str="(A(BC)D)EF(G(H)(IJ)K)LM(N)";
console.log(solution(str));
올바른 괄호에서 조금 더 발전한 문제!
(
부터 시작해서 그 안에 있는 문자를 제거해주는 while문을 사용하면 된다.
큰 그림은 올바른 괄호와 비슷함.
사실 while(stack.pop()!=='(');
이 문장이 핵심임..
출처 : 자바스크립트 알고리즘 문제풀이 입문(코딩테스트 대비)를 보고 작성!