균형 잡힌 괄호 치기
- 괄호의 짝이 제대로 이뤄져있는지 판별하고 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;
}
};
댓글 영역