eaz_coding

[Programmers] 괄호 변환(Javascript) 본문

eaz_algorithm

[Programmers] 괄호 변환(Javascript)

eaz_silver 2024. 6. 5. 23:47

문제

https://school.programmers.co.kr/learn/courses/30/lessons/60058

 

프로그래머스

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

programmers.co.kr


풀이

Javascript

function check(str) {
    let stack = [];
    for (let i = 0; i < str.length; i++) {
        if (str[i] == "(") stack.push("(")
        else {
            if (stack.length) stack.pop()
            else return false
        }
    }
    return stack.length === 0;
}

function change(p) {
    let res = '';
    for (let i = 0; i < p.length; i++) {
        if (p[i] == ')') res += '(';
        else res += ')';
    }
    return res;
}

function solution(p) {
    if (p === '') return '';

    let result = '';
    let left = 0;
    let right = 0;
    
    for (let i = 0; i < p.length; i++){
        if (p[i] === '(') left++
        else right++
        
        if (left === right) {
            let u = p.slice(0, i+1);
            let v = p.slice(i+1);

            if (check(u)) {
                return u + solution(v);
            } else {
                result = '(' + solution(v) + ')';
                result += change(u.slice(1, u.length - 1));
                return result;
            }
        }
    }
}