자료구조(스택, 큐)-올바른 괄호(스택)

Min·2021년 2월 17일
0

CodeKata

목록 보기
24/27
post-thumbnail

문제

괄호가 입력되면 올바른 괄호이면 “YES", 올바르지 않으면 ”NO"를 출력합니다.
(())() 이것은 괄호의 쌍이 올바르게 위치하는 거지만, (()()))은 올바른 괄호가 아니다.

입력설명

첫 번째 줄에 괄호 문자열이 입력됩니다. 문자열의 최대 길이는 30이다.

출력설명

첫 번째 줄에 YES, NO를 출력한다.

입력예제

(()(()))(()

출력예제

NO

나의 틀린 풀이

문제를 정확히 이해하지 못했다.

function solution(s){
    let answer="YES";
    stack=[];
    for (let x of s) {
        if ( x === '(' ) stack.push(x)
        else if ( x === ')' ) stack.pop(x)
        console.log(stack)
        if (stack.length > 0) answer="NO"
    }

    return answer;
}

// let a="(()(()))(()";
let a="(())()";
console.log(solution(a));

자바스크립트 스택

배열의 push와 pop을 이용

풀이 방법

'(' : push
')' : pop
올바른 괄호는 stack에 아무것도 남지 않는다.
-> 여는 괄호와 닫는 괄호의 쌍과 방향이 맞기 때문에

스택 상단에 있는 여는 괄호는
현재 닫는 괄호의 짝이다.

쌍과 방향이 맞는 예

(())()

쌍은 맞으나 방향이 다른 예

(()) )(

function solution(s){
    let answer="YES";
    stack=[];
    for(let x of s){
        if(x==='(') stack.push(x);
        else{
            if(stack.length===0) return "NO"; // 닫는괄호 상황
            stack.pop();
        }
    }
    if(stack.length>0) return "NO"; // 여는괄호가 많은 상황
    return answer;
}

let a="(()(()))(()";
console.log(solution(a));
profile
slowly but surely

1개의 댓글

comment-user-thumbnail
2022년 10월 18일
답글 달기