본문 바로가기

알고리즘 문제풀이

[프로그래머스] 2020 카카오 공채 - 괄호변환

오늘 푼 문제

 

2. 괄호변환 / Lv.2 / 시간 : 29분

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

 

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

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

programmers.co.kr

function solution(p) {
    let split = (s)=>{ // u, v 분리
        let [open,close] = [0,0];
        for(let i=0;i<s.length;i++){
            if(s[i]==="(") open++;
            else close++;
            if(open===close){
                return [s.slice(0,i+1),s.slice(i+1)];
            } 
        }
    }
    
    let checkRight = (s)=>{ // 올바른 문자열 판단
        let stack = [];
        for(let i=0;i<s.length;i++){
            let cur = s[i];
            if(cur==="(") stack.push(cur);
            else{
                let pair = stack.pop();
                if(!pair) return false;
            }
        }
        return stack.length? false : true;
    }
    
    let wholeProcess = (s)=>{
        if(s==="") return "";
        if(checkRight(s)) return s;
        let [u,v] = split(s);
        if(checkRight(u)) return u+wholeProcess(v);
        return "(" + wholeProcess(v) + ")" 
                + u.slice(1,-1).replace(/\(|\)/g,a=>a==="("?")":"(");
    }

    return wholeProcess(p);
}