Thief of Wealth

https://programmers.co.kr/learn/courses/30/lessons/60058

 

코딩테스트 연습 - 괄호 변환

카카오에 신입 개발자로 입사한 "콘"은 선배 개발자로부터 개발역량 강화를 위해 다른 개발자가 작성한 소스 코드를 분석하여 문제점을 발견하고 수정하라는 업무 과제를 받았습니다. 소스를

programmers.co.kr

 

const 균형잡힌문자열u와v반환 = (w) => {
  let leftCount = 0;
  let rightCount = 0;

  for (let i = 0; i < w.length; i++) {
    w[i] === "(" ? leftCount++ : rightCount++;
    if (leftCount === rightCount) {
      const u = w.slice(0, i + 1);
      const v = w.slice(i + 1);

      return [u, v];
    }
  }

  return [w, ""];
};

const 올바른괄호문자열인가 = (str) => {
  const stack = [];
  for (const chr of str) {
    if (chr === "(") {
      stack.push("(");
    } else {
      if (stack.length > 0) {
        if (stack[stack.length - 1] === "(") {
          stack.pop();
        }
      } else {
        return false;
      }
    }
  }

  return stack.length === 0 ? true : false;
};

const solution = (p) => {
  if (p.length === 0) return "";
  if (올바른괄호문자열인가(p)) return p;

  let [u, v] = 균형잡힌문자열u와v반환(p);
  console.log(u, v);
  if (올바른괄호문자열인가(u)) {
    return u + solution(v);
  } else {
    u = u.slice(1, -1);
    const reversedU = Array.from(u)
      .map((chr) => (chr === "(" ? ")" : "("))
      .join("");
    return "(" + solution(v) + ")" + reversedU;
  }
};

console.log(solution("()))((()"));
profile on loading

Loading...