말랑한 하루

[Programmers] 괄호 변환 (Lv 2, JavaScript) 본문

문제풀이/Programmers

[Programmers] 괄호 변환 (Lv 2, JavaScript)

지수는말랑이 2022. 7. 13. 14:33
반응형

[ 개요 ]
풀이시간 : 62분

[ 학습 내용 ]
문제에 대한 이해가 늦었다. 

u가 반드시 균형잡힌 문자열로 분리가 되어야 함이 핵심이었으나, 늦게발견하여 풀이가 늦어졌음.


[ 소스 코드 ]

function checkBrackets(p) {
    var balance = 0;
    for(var i=0; i<p.length; i++) {
        p[i] === "(" ? balance++ : balance--;
        if (balance < 0) return false;
    }
    return true;
}
function solution(p) {
    var answer = "";
    
    // 1
    if (p === "") return "";
    
    // 균형잡힌 괄호 문자열을 찾는 인덱싱
    var balance = 0;
    var idx = 0;
    do {
        p[idx++] === "(" ? balance++ : balance--;
    } while(balance !== 0);
    
    // 2
    var u = p.slice(0, idx);
    var v = p.slice(idx);
    
    // 3
    if(checkBrackets(u)) {
    	// 3-1
        answer = u + solution(v);
    } else {
    	// 4-1, 4-2, 4-3
        answer = "(" + solution(v) + ")";
        // 4-4
        for(var i=1; i<idx-1; i++) {
            answer += p[i] === "(" ? ")" : "(";
        }
    }
    // 3-1, 4-5의 반환
    return answer;
}

[ 코드 분석 ]

용어의 정의를 따라 풀이를 진행하면 간단하게 해결할 수 있었다. 위치에 맞게 주석으로 표기하였다.

반응형
Comments