상세 컨텐츠

본문 제목

balanced parentheses - Javascript

Programming/Algorithm

by 쌩우 2019. 6. 27. 09:48

본문

균형 잡힌 괄호 치기

  • 괄호의 짝이 제대로 이뤄져있는지 판별하고 boolean 값을 리턴
  • *e.g
  • balancedParens('('); // false
  • balancedParens('()'); // true
  • balancedParens(')('); // false
  • balancedParens('(())'); // true
  • balancedParens('{}'); // true
  • balancedParens('[({})]'); // true
  • balancedParens('[(]{)}'); // false
  • balancedParens(' var wow = { yo: thisIsAwesome() }'); // true
  • balancedParens(' var hubble = function() { telescopes.awesome();'); // false

가장 최근에 나타났던 괄호와 지금 새로 나타난 괄호의 짝이 맞는지를 봐야하므로, 뭔가 최근의 값을 다루는 경우에는

"STACK"의 개념을 이용하자!!!

var balancedParens = function(input){
    let stack = [];
    let parens = {
        '(':')',
        '{':'}',
        '[':']'
    }
    //괄호는 여는 것과 닫는 것으로 나뉜다.
    //이전에 나온 괄호와, 현재 맞이한 괄호의 종류(){}[] 및 여닫음 (,) 여부를 판별하자.
    //어떤 종류건 닫는 괄호로 시작하면 안 된다.

    for(let i = 0; i < input.length; i++) {
        if(input[i] === '(' || input[i] === '{' || input[i] === '[') {
            stack.push(input[i]);
        }
        else if(input[i] === ')' || input[i] === '}' || input[i] === ']'){
            let recent = stack.pop()

            if(input[i] !== parens[recent]) {
                console.log('input i?', input[i])
                console.log('recent parens?', parens[recent])
                return false;
            }
        }
    }
    console.log('stack???', stack)
    if(stack.length !== 0) {
        return false;
    } else {
        return true;
    }
};

관련글 더보기

댓글 영역