06.09에 푼 문제입니다🌷
변환 함수
재귀함수를 잘 이용해야 한다!
문제가 복잡해서 몇번 읽어보고 풀었다,,ㅎ
function solution(p) {
return merge(p);
}
function merge(w){
if(w==='') return ''
let result=''
let index = UV(w)
let u=w.slice(0,index)
let v=w.slice(index)
if(checkbalance(u)){
result+=u
result+=merge(v)
}
else{
result+='('+merge(v)+')'
const ulist=[...u]
ulist.pop()
ulist.shift()
ulist.forEach((x,index)=>{
if(x==='(') ulist[index]=')'
else ulist[index]='('
})
result+=ulist.join('')
}
return result
}
//u,v를 나누는 index를 구하는 함수
function UV(p){
let num=0
const plist=[...p]
if(plist[0]==='(') num=1
else if(plist[0]===')') num=-1
for(let i=1;i<=plist.length;i++){
if(num===0){
num=i
break
}
if(plist[i]==='(') num+=1
else if(plist[i]===')') num-=1
}
return num
}
//균형잡힌 괄호 문자열인지 체크
function checkbalance(p){
const plist=[...p]
const stack=[]
if(plist[0]===')') return false
stack.push(plist.shift())
for(let x of plist){
if(stack.length===0) return false
if(x==='(') stack.push(x)
else if(x===')') stack.pop()
}
return true
}