본문 바로가기
CS/알고리즘

[월간 코드 챌린지 시즌2] PGS lv2. 괄호 회전하기

by westpearl 2025. 9. 7.
728x90
반응형
SMALL

 

 

이 문제는 이름을 잘못 지었다. 헷갈리게 괄호회전하기가 뭐냐, 괄호 밀기도 아니고 - ..- 

여튼 괄호 관련한 문제는 학부생때  stack 을 이용하도록 습관화 돼있어서 
stack으로 풀었음

 

1. 내가 푼 풀이

function solution(s) {
    let count =0;
    const arr = s.split("");
    for(let i=0;i<arr.length;i++){
        const newArr = [...arr.slice(i), ...arr.slice(0,i)];
        if(isAlight(newArr)){
            count +=1;
            
        }
    }
    
    return count;
}
const isAlight = (arr)=>{
    const closeBrackets = [')',']','}'];
    const openBrackets = ['(','[','{'];
    const stack =[];
    
    for(let i=0;i<arr.length;i++){
        const char = arr[i]
        if(openBrackets.indexOf(char)!==-1){
            stack.push(char);
        }else{
            const top = stack.pop();
            if(!top) return false;
            const openIndex = openBrackets.indexOf(top);
            const closeIndex = closeBrackets.indexOf(char);
            if(openIndex!==closeIndex){
                return false;
            }
            
        }
    }
    if(stack.length>0) return false;
    return true;
   
}

 

2. 다른사람 풀이도 넣으려고햇으나, 길어서 그냥 패스.
닫는괄호와 여는괄호를 매칭시키는 부분을 다르게 구현한 듯 하다. 

사실 나처럼 배열의 indexOf를 써도되고, 객체를 쓰신분도 있다. 
코드 길이면에서는 객체가 훨 나은듯.

다른 함수를 쓰지않고 그냥 solution안에서만 해결한 분도 있는데, 읽기 귀찮아서 패스해본다..

LIST