
문제해석


나의 코드
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;