validParentheses.js

Codewars 알고리즘 풀이


Problem

  • Write a function that takes a string of parentheses, and determines if the order of the parentheses is valid.
    • 괄호의 순서가 유효한지를 반환한다.
  • The function should return ‘true’ if the string is valid, and ‘false’ if it’s invalid.
    • 괄호의 순서가 유효하면 ‘true’를 반환하고, 그렇지 않으면 ‘false’를 반환한다.



Solution 01

function validParentheses(parens) {
  let count = 0;
  
  for (let i = 0; i < parens.length; i++) {
    if (parens[i] === '(') {
      count++;
    }
    
    if (parens[i] === ')') {
      count--;
    }
    
    if (count < 0) {
      return false;
    }
  }
  return count === 0 ? true : false;
}

validParentheses('(');               // false
validParentheses(')');               // false
validParentheses('()');              // true
validParentheses('(())');            // true
validParentheses('((()()))');        // true
validParentheses('(())((()())())');  // true


Solution 02

function validParentheses(parens) {
  let count = 0;
  
  for (let i = 0; i < parens.length && count >= 0; i++) {
    count += parens[i] === '(' ? 1 : -1;
  }
  return count === 0;
}

validParentheses('(');               // false
validParentheses(')');               // false
validParentheses('()');              // true
validParentheses('(())');            // true
validParentheses('((()()))');        // true
validParentheses('(())((()())())');  // true


Solution 03

function validParentheses(parens) {
  const regExp = /\(\)/;
  
  while (regExp.test(parens)) {
    parens = parens.replace(regExp, '');
  }
  return !parens;
}

validParentheses('(');               // false
validParentheses(')');               // false
validParentheses('()');              // true
validParentheses('(())');            // true
validParentheses('((()()))');        // true
validParentheses('(())((()())())');  // true