6-2) 괄호 문자 제거

6160 단어 스택스택

문제

입력된 문자열에서 소괄호 ( ) 사이에 존재하는 모든 문자를 제거하고 남은 문자만 출력하는 프로그램을 작성하세요.
[입력설명]
첫 줄에 문자열이 주어진다. 문자열의 길이는 100을 넘지 않는다.
[출력설명]
남은 문자만 출력한다.

입력예제 1

(A(BC)D)EF(G(H)(IJ)K)LM(N)

출력예제 1

EFLM


문제 풀이

예습이론

  • 스택은 배열이기 때문에, 생성할 때 let stack=[]와 같이 하면 된다. stack에 요소 x를 삽입하고 싶다면 stack.push(x), 요소를 꺼내고 싶다면 stack.pop()을 하면된다. LIFO이기 때문에, pop을 하면 가장 마지막에 들어간 요소가 나오게 된다.
  • while(stack.pop()!=='(')은, '('까지 pop을 하고 나서야 false가 된다.
  • stack.join('')은, 배열을 string으로 합쳐준다. (앞 강의 참고)

코드

이 문제는 스택을 활용한 문제이다. 여는괄호와 문자가 나오면 push, 닫는괄호가 나오면 stack에서 여는괄호(자신의 짝)까지 pop한다.

<html>
    <head>
        <meta charset="UTF-8">
        <title>출력결과</title>
    </head>
    <body>
        <script>
            function solution(s){  
                let answer;
                let stack=[];
                for(let x of s){
                    if(x===')'){
                        //여는괄호(자신의 짝)까지 pop
                        while(stack.pop()!=='('); //'('까지 pop하고 거짓이 됨-> 반복문 중단 
                    }
                    else stack.push(x); //닫는 괄호가 아닐 때는 push
                }
                //console.log(stack); //배열의 형태로 들어가있음 ['a', 'b', 'c']
                answer=stack.join(''); //string으로 합쳐줌 
                return answer;
            }

            let str="(A(BC)D)EF(G(H)(IJ)K)LM(N)";
            console.log(solution(str));
        </script>
    </body>
</html>

좋은 웹페이지 즐겨찾기