프로그래머스 LEVEL 2(괄호 변환)

image

  • 사용 언어 : javascript

  • 해결 날짜 : 2022-08-25

  • 해결 방법 :

    • 문자열 p를 균형잡힌 괄호 문자열 u, v로 분리
    • u가 올바른 괄호 문자열이면 v에 대한 재귀 수행
    • u가 올바르지 않은 괄호 문자열이면 ‘(‘ + v에 대한 재귀 +’)’ + 첫, 끝 글자 제거한 u의 괄호 방향 뒤집은 문자열 반환
  • 회고 : -

  • 코드

    const isProperString = (u) => {
        let count = 0;
        for (let i = 0; i < u.length; i++) {
            u.charAt(i) === '(' ? count++ : count--;
            if (count < 0) return false;
        }
        return u.charAt(0) === ')' || u.charAt(u.length - 1) === '(' ? false : true;
    }
    
    const toBalancedString = (w) => {
        if(w.length === 0) return '';
        if(isProperString(w)) return w;
        let count = 0;
        for (let i = 0; i < w.length; i++) {
            w.charAt(i) === '(' ? count++ : count--;
            if (count === 0) {
                count = i + 1;
                break;
            }
        }
        let u = w.slice(0, count);
        let v = w.slice(count, w.length);
        if (isProperString(u)) {
            return u + toBalancedString(v);
        } else {
            let temp = '(' + toBalancedString(v) + ')';
            u = u.slice(1, u.length - 1);
            let newU = '';
            for (let i = 0; i < u.length; i++) {
                newU += u.charAt(i) === '(' ? ')' : '(';
            }
            return temp + newU;
        }
    }
    
    function solution(p) {
        return toBalancedString(p);
    }
    
  • 출처: 프로그래머스 코딩 테스트 연습, https://school.programmers.co.kr/learn/challenges