어제의 나보다 성장한 오늘의 나

[프로그래머스][2020 KAKAO BLIND RECRUITMENT][자바스크립트] 괄호 변환 본문

알고리즘/프로그래머스(Programmers)

[프로그래머스][2020 KAKAO BLIND RECRUITMENT][자바스크립트] 괄호 변환

NineOne 2021. 5. 4. 20:08

programmers.co.kr/learn/courses/30/lessons/60058?language=javascript

 

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

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

programmers.co.kr

function balanceBracket(str) {
  let left = 0;
  let right = 0;
  let i = 0;

  for (; i < str.length; i++) {
    let bracket = str.charAt(i);

    if (bracket == "(") left++;
    else right++;

    if (left == right) break;
  }

  return i+1;
}

function isCheckBracket(str) {
  let stack = [];
  for (let i = 0; i < str.length; i++) {
    if (str.charAt(i) == "(") stack.push("(");
    else {
      if (stack.length == 0) return false;
      stack.pop();
    }
  }
  return true;
}

function changeBracket(str) {
  let temp = "";
  for (let i = 0; i<str.length; i++) {
    if (str.charAt(i) == "(") temp += ")";
    else temp += "(";
  }
  return temp;
}

function dfs(cnt, u, v) {
  if (u.length == 0) return '';

  let length = balanceBracket(u);
  v = u.substr(length, u.length);
  u = u.substr(0, length);

  if (isCheckBracket(u)) {
    return u + dfs(cnt + 1, v, "");
  } else {
    let s = "(";
    s += dfs(cnt + 1, v, "") + ")";
    u = u.substr(1);
    u = u.substr(0, u.length-1);
    s += changeBracket(u);
    return s;
  }
}

function solution(p) {
  return dfs(0, p, "");
}

정리

  • 과정을 잘 읽고 따라 하면 문제없이 풀 수 있다!
  • 하지만!!!!  "4-4. u의 첫 번째와 마지막 문자를 제거하고, 나머지 문자열의 괄호 방향을 뒤집어서 뒤에 붙입니다." 이 문장에서 reverse 하는 게 아니라 '(' 괄호는 ')'으로 바꾸는 말이라는 걸 주의하자.

 

Comments