ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [자료구조(스택/큐)] 괄호문자제거
    알고리즘 2022. 9. 25. 15:49

    문제

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

    입력설명
    첫 줄에 문자열이 주어진다. 문자열의 길이는 100을 넘지 않는다.

    출력설명
    남은 문자만 출력한다.

    입력예제 1 (A(BC)D)EF(G(H)(IJ)K)LM(N)

    출력예제 1 EFLM


    결과

    O

    내가 푼 방식

    function solution(s){
      let stack = [];
      
      for(let x of s) {
        if(x === ')') {
          if(stack.indexOf('(') === -1) {
          	stack = [];
          } else {
     		stack.splice(stack.lastIndexOf('('))       
          }
        } else {
    			stack.push(x)      
        }
      }
      return stack.join('');
    }

    접근과정

    1. stack이라는 빈배열을 설정하고 인자로 받는 string을반복문을 돌린다. 

    2. ')' 일때 앞에 제일 가까운 '('가 있다면 '(' 부터 ')'까지 날린다.

    3. '('가 없다면 stack을 빈배열로 재할당한다.

    4. 그 외의 경우에는 stack에 push한다

    5. 마지막에 join시켜 배열을 string으로 만들고 리턴시킨다. 

     

    모범답안

    function solution(s){  
        let answer;
        let stack=[];
        for(let x of s){
            if(x===')'){
                while(stack.pop()!=='(');
            }
            else stack.push(x);
        }
        answer=stack.join('');
        return answer;
    }

    리뷰

    1. 전반적인 플로우는 비슷하나 if문에서 나는 접근과정 2번 3번으로 두개의 분기처리를 했는데 생각해보니 '('가 있든 없든 어차피 날려야 되는 것이므로 모범답안과 같이 pop을써서 여는괄호를 나올 때까지 제거한다.  

    '알고리즘' 카테고리의 다른 글

    [그리디] 결혼식  (0) 2023.01.28
    [선택정렬]  (0) 2022.10.09
    [자료구조(스택/큐)] 올바른괄호  (0) 2022.09.18
    [효율성/해쉬] 아나그램  (0) 2022.09.04
    [효율성] 학급회장 해쉬  (0) 2022.08.07

    댓글

Designed by Tistory.