괄호문자 제거(stack개념)




입력된 문자열에서 소괄호 ( ) 사이에 존재하는 모든 문자를 제거하고 남은 문자만 출력하는 프로그램을 작성하세요.



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()!=='('); 이 문장이 핵심임..






출처 : 자바스크립트 알고리즘 문제풀이 입문(코딩테스트 대비)를 보고 작성!




© 2018. by sora

Powered by sora