[Refresh ! 코딩 테스트 / js] - 괄호 변환

정대만·2025년 1월 30일

문제해석

  • 문제해석을 다 알려주는문제임
  • 사실 처음에는 이해가 안되서 그림으로 정리를 해봤다.
  • 따라서 이렇게 올바른 문자열과 균형잡인 문자열을 구하기 위해서 2개의 함수가 필요하다고 생각을 했다.
    https://velog.io/@taehyunkim/코딩-잘하는-법

나의 코드

   function hey (arr){
        let start=0;
        let end=0;
        for(var i=0; i<arr.length; i++){
            if(arr[i]=='(') start+=1;
            if ( arr[i]==')') end +=1;
            if(start==end) return i+1;
        }
       return arr.length
    }
     function is_right (arr2){
        let start=0;
        for(var i=0; i<arr2.length; i++){
            if(arr2[i]=='(') start+=1;//chat gpt 에서 알려준 부분
            else start-=1;
            
            
              if (start < 0) return false; 
        }
        return start == 0; // true 인지 false 인지 구별하는거 
    }
    


function solution(p) {
    if (p.length === 0) return '';
    var answer = '';
 
    for(var i=0; i<p.length; i++){
    let first_index = hey(p); // 첫번째로 균형 잡히게 하는거 
    let u = p.slice(0, first_index);
    let v = p.slice(first_index);
        // u가 올바른지 안올바른지에 따라 결과가 다름
        if(is_right(u)) {
            //올바르다면 v 를 1단계 부터 다시간다. 그리고 u 에 붙인다.
            return u+solution(v)
        }
        else{
            //아니라면
            let string_i = '(';
            string_i+=solution(v); //1단계부터 다시 변환한 결과를 붙인다.
            string_i+=')';
            u = u.slice(1, u.length-1).split("").map(c => (c === '(' ? ')' : '(')).join("");
             return string_i + u;
        }
        
    }
    
}
  • 사실 chatgpt 에게 어디가 틀렸냐고 물어봤다.

  • 첫번째로는 hey 함수에서 if(start==end) return i+1; 이부분이 틀렷다고함 . slice 으로 나눈다고 했을경우. slice 는 index+1 까지 자른다고 생각해야됨

  • 여기 부분도 삼항식으로 간편하게 바꿔줌

u = u.slice(1, u.length-1).split("").map(c => (c === '(' ? ')' : '(')).join(""); 

여기부분도 map 으로 괄호 순서 바꾸는거 if 문이나 else 문으로 바꿀려고 했는데 삼항식을 사용해서 간편한게 바꿔주었다.

  • if (start < 0) return false; 
profile
안녕하세요

0개의 댓글