Simple reversed parenthesis ( 6 kyu )

문제

Given a string, return the minimal number of parenthesis reversals needed to make balanced parenthesis.

For example:

solve(")(") = 2 Because we need to reverse ")" to "(" and "(" to ")". These are 2 reversals.
solve("(((())") = 1 We need to reverse just one "(" parenthesis to make it balanced.
solve("(((") = -1 Not possible to form balanced parenthesis. Return -1.

괄호쌍을 맞추기 위해 최소 몇개의 괄호를 뒤집어야 하는지 구하는 문제

풀이

function solve(s) {
  while ( s.includes('()') ) {
    s = s.replace(/\(\)/g, '');
  }
  if ( s.length % 2 === 1 ) return -1;
  let count = 0;
  const obj = {
      ')(': 2,
      '((': 1,
      '))': 1,
    };
  for ( let i = 0; i <= s.length-2; i += 2 ) {
    count += obj[s[i]+s[i+1]]
  }
  return count;
}

맞는 괄호쌍이 없어질 때까지 while로 지워주고,

객체를 만들어 뒤집어야하는 개수를 미리 적어 놓고 찾아서 count에 더해줌

다른 사람의 풀이

function solve(s){
  if(s.length%2) return -1;
  var t=0, d=0;
  for(let c of s) {
    if(c==='(') d++;
    else if(d) d--;
    else {t++; d++;}
  }
  return t+d/2;
}

모르겠지만 신기하게 풀었다


+ Recent posts