알고리즘 문제풀이/프로그래머스

괄호 변환 / js 풀이

Heman 2021. 8. 28. 01:43

프로그래머스 : 괄호 변환

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

문제풀이

이번 문제는 2020 카카오 블라인드 채용에 나왔던 문제입니다. 프로그래머스 2단계 연습문제에 있네요!

해당 문제는 지문에 적혀있는 문제 풀이의 순서를 그대로 코드로 입력하면 해결 할 수 있습니다.

제가 풀었던 코드는 더 짧았지만 포스팅을 위해서 단계별로 나누어 주석으로 적어두었습니다 ㅎㅎ

 

코드

function solution(p) {
    if(p === "") return p;      // 1단계
    let u = '', v = '', left = 0, right = 0;
    
    for(let i = 0; i<p.length; i++){
        p[i] === '(' ? left ++ : right ++;
        
        if(left === right){     // 2단계
            u = p.slice(0, i+1);  // 균형잡힌 문자열 u
            v = p.slice(i+1, p.length); // 나머지 문자열 v
            
            if(checkRightString(u))  // 3단계
                return u + solution(v); // 3-1단계
            
            else{   // 4단계
                let answer = '('; // 4-1단계
                answer += solution(v); // 4-2단계
                answer += ')'; // 4-3단계
                answer += u.slice(1, u.length-1).split('').map(elem => elem === '(' ? ')' : '(').join('');
                // 4-4단계

                return answer // 4-5단계 
            }
        }
    }
}

function checkRightString(str){
    // 올바른 문자열 체크를 위한 함수
    const stack = [];
    
    for(let i of str){
        if(i === '(') stack.push(i);    // '('는 스택에 넣고
        else{
            // ')'일때 스택이 비어있다면 return false
            if(stack.length <= 0){
                return false
            }
            // 아니라면 스택 요소 하나를 pop
            else stack.pop();
        }
    }
    
    return true;
}

 

리뷰

한동안 프로젝트로 바빠서 코딩테스트 문제를 안풀다 보니, 처음에 조금 헤매었는데 지문만 꼼꼼히 읽는다면 그렇게 어려운 문제는 아니었던 것 같습니다.

처음에 '균형잡힌 괄호 문자열' 이라는 말이 대칭이라는 뜻인가 헷갈렸는데, 단순히 왼쪽 오른쪽 괄호의 수가 맞아떨어지는 순간이었습니다 ㅜ

'알고리즘 문제풀이 > 프로그래머스' 카테고리의 다른 글

스킬트리 / js 풀이  (0) 2021.08.31
[1차] 뉴스 클러스터링 / js 풀이  (0) 2021.08.31
프린터 / js 풀이  (0) 2021.08.06
튜플 / js 풀이  (0) 2021.08.02
네트워크 / js 풀이  (0) 2021.07.26