far

[JS 알고리즘] 괄호문자제거 (스택) 본문

알고리즘/알고리즘 베이스

[JS 알고리즘] 괄호문자제거 (스택)

Eater 2023. 3. 31. 03:00

괄호문자제거

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

 

입력설명 

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

 

출력설명

남은 문자만 출력한다.

 

입력예제

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

 

출력예제 

EFLM

 

// 내가 푼 것

function solution(s){  
    let answer = "";
    let stack = [];

    for (let i of s) {
        if (i === "(") {
            stack.push(i)
        } else if (i === ")") {
            stack.pop()
        } else if (stack.length === 0) {
            answer += i
        }
    }

    return answer;
}

let str="(A(BC)D)EF(G(H)(IJ)K)LM(N)";
console.log(solution(str));

for..of안에 if로 분기를 만들어서 괄호가 사라졌을 경우 문자열을 answer에 더해주는 방법으로 풀었다.

// 강의의 풀이

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;
}

let str="(A(BC)D)EF(G(H)(IJ)K)LM(N)";
console.log(solution(str));

강의에서는 while문을 사용해서 "("가 pop으로 지워질 때 까지 pop을 하는 방법으로 풀었다. 내 풀이보다 if문을 덜 거치기 때문에 더 효율적인것 같다.

 

 

 

출처:

https://www.inflearn.com/course/%EC%9E%90%EB%B0%94%EC%8A%A4%ED%81%AC%EB%A6%BD%ED%8A%B8-%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98-%EB%AC%B8%EC%A0%9C%ED%92%80%EC%9D%B4#curriculum

Comments