본문 바로가기

프로그램 강좌

[LeetCode]20. Valid Parentheses

올바른 괄호를 썼는지 판별하는 문제입니다.
전에 풀어봤던건 단순 괄호 열리고 닫히는거였는데 이건 좀 더 복잡하네요.

Input/Output

dd

Input Output
() true
()[]{} true
(] false
([)] false
{[]} true


시도(성공)

각 괄호 시작값에 따라 적절한 값이 나오도록 객체화 했습니다.
값이 쌓일수있도록 빈 스택을 만들고, 현재값이 객체의 값이랑 일치할때마다 스택이 한글자씩 지워지도록 구성했습니다. 이렇게 처리가 전부 끝났는데도 스택값이 남아있을경우 false, 0이면 true를 반환합니다.

/**
 * @param {string} s
 * @return {boolean}
 */
var isValid = function(s) {
    // s='[}';
    const parentheses = {
        '(':')',
        '{':'}',
        '[':']'
    }
    let stack = [];
    const keys = Object.keys(parentheses); // ['(','{','[']
    // console.log(keys);
    // console.log(parentheses['(']);
    for(let i=0;i<s.length;i++){
        // console.log(keys.includes(s[i]));
        if(keys.includes(s[i])) stack.push(parentheses[s[i]]);
        // console.log(stack);
        // console.log(stack[stack.length-1]); 
        else {
            if(stack[stack.length-1]===s[i]) stack.pop();
            else return false;
        }
    }
    return stack.length===0;  //0이면 true 아니면 false
};
728x90