-
[프로그래머스/javascript] 괄호변환카테고리 없음 2023. 3. 29. 18:08
풀이방법
우선 균형잡힌 문자열이맞는지 확인하는 코드와 올바른 문자열이 맞는지 확인하는 펑션을 작성하였습니다.
이후 올바른 문자열이 맞다면 그대로 p를 반환하고
아닐경우 u와 v로 나뉘게 됩니다.
새로운 u(newP)가 올바른 문자열이 맞다면 u+solution(v)를 반환합니다.
그렇지 않다면, 문제에 적힌대로 뒤집고 어쩌구저쩌구를 실행합니다. 🤣
//균형잡힌 문자열...이라하면... //p가 군형잡힌 문자열이라면 그대로 반환한다. //그렇지 않으면 균형잡힌문자열로 더이상 분리할수없는 u와 v나머지로 분류한다. //즉 return solution(u)+solution(v)...?? //즉 앞에서부터 잘라서, isBalanced===true인 경우를 찾음. 근데 이제 두개씩 증가해가면서 찾으면 됨. //얘가 올바른 문자열이라면 얘는 그대로 반환하고 v에 대해서 또 분리해서 수행하면 됨. //즉 가운데 쯤에 있는 제일 문제인 놈 찾으면 됨.!! // 올바른 문자열이 아니라면 v에 대해서 재귀적으로 수행해서 반환값을 찾음.!! // (여기에 v반환값넣음) + u는 앞뒤 문자 제거하고, 괄호 방향디집어줌. 그리고 ()로 감싸줌..!! function solution(p,v=null) { if(isCorrect(p)) return p let newP for(let i=1;i<p.length;i+=2){ newP= p.slice(0,i+1) if(isBalanced(newP)) { v=p.slice(i+1) break; } } if(isCorrect(newP)) return newP+solution(v) else{ newP = newP.slice(1,newP.length-1) let newU = '' for(let i=0;i<newP.length;i++){ if(newP[i]==='(') newU+=')' else newU+='(' } return `(${solution(v)})${newU}` } } function isCorrect(str){ let stack = []; for(let i=0;i<str.length;i++){ if(str[i]==='('){ stack.push('(') }else{ if(stack[stack.length-1]==='('){ stack.pop() } else return false; } } return true; } function isBalanced(str){ let obj = {'(':0,')':0} for(let i=0;i<str.length;i++){ if(str[i]==='('){ obj['(']++; }else{ obj[')']++; } } return obj['(']===obj[')']?true:false }