58청춘 2024. 10. 4. 16:42
728x90

문제

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

풀이

해당 문제는 문제를 해석하는데 어려움이 있었다... 

 

일단 프로세스를 문제에서 설명해주기 때문에 프로세스를 따르며 구현하면 큰 어려움은 없다.

 

코드

function solution(p) {
  const check = (st) => {
    const stack = [];

    for (let i = 0; i < st.length; i++) {
      if (st[i] === '(') stack.push('(');
      else {
        if (stack.length === 0) return false;
        stack.pop();
      }
    }
    return true;
  }

  const func = (w) => {
    let res = '';
    let cnt = 0;

    if (w.length === 0) return '';

    for (let i = 0; i < w.length; i++) {
      if (w[i] === '(') cnt += 1;
      else cnt -= 1;

      if (cnt === 0) {
        const sl = w.slice(0, i + 1);
        if (check(sl)) {
          res = sl + func(w.slice(i + 1));
          return res;
        }
        else {
          res = '(' + func(w.slice(i + 1)) + ')';
          for (let j = 1; j < i; j++) {
            if (w[j] === '(') res = res + ')';
            else res = res + '(';
          }
        }
        return res;
      }
    }
  }
  return func(p);
}
728x90