[프로그래머스 lev2/JS] 괄호 변환

woolee의 기록보관소·2022년 12월 2일
0

알고리즘 문제풀이

목록 보기
113/178

문제 출처

프로그래머스 lev2 - 괄호 변환

나의 풀이

짝이 맞는지 판단하기 위해 string left, string right로 분리해서 개수를 비교해준다.

p.slice(0, i+1)를 현재 u로 잡은 뒤에, u가 올바른 괄호면 그대로 넣으면 되지만,
올바른 괄호가 아니라면 ()를 가장 처음과 마지막에 넣고, 그 중간에서 재귀를 진행한다.

function solution(p) {
  let answer = "";
  let sl = (sr = 0); // string left, string right
  let flag = false;

  // 1. 빈 문자열이면
  if (p.length == 0) return "";

  for (let i = 0; i < p.length; i++) {
    if (p[i] == "(") sl++;
    if (p[i] == ")") sr++;
    if (sl < sr) flag = true; // 올바른 괄호 X

    // 2. 문자열을 u, v로 분리
    if (sl == sr) {
      // 4. 올바른 괄호가 아니면
      if (flag == true) {
        answer += "(";
        answer += solution(p.slice(i + 1, p.length)); // 나머지(v) 재귀
        answer += ")";

        // 4-4. 나머지 문자열 괄호 reverse
        for (let j = 1; j < i; j++) {
          if (p[j] == ")") answer += "(";
          if (p[j] == "(") answer += ")";
        }
        // 4-5. 생성된 문자열 반환
        return answer;
      }

      // 3. 올바른 괄호 문자열이면
      else {
        answer += p.slice(0, i + 1); // 3-1. 문자열을 이어 붙이고
        answer += solution(p.slice(i + 1, p.length)); // 나머지(v) 재귀
        return answer;
      }
    }
  }
}
profile
https://medium.com/@wooleejaan

0개의 댓글