s는 여러 괄호들로 이루어진 String 인자이다. s가 유효한 표현인지 아닌지 true/false로 반환하라.
종류는 '(', ')', '[', ']', '{', '}' 으로 총 6개 있습니다. 아래의 경우 유효하다. 한 번 괄호를 시작했으면, 같은 괄호로 끝내야 한다. 괄호 순서가 맞아야 한다.
Ex)
s = "()"
return true
s = "()[]{}"
return true
s = "(]"
return false
s = "([)]"
return false
s = "{[]}"
return true
function isValid(s) {
let arr = s.slice();
for(let i=0; i<s.length/2; i++) {
for(let j=0; j<s.length-1; j++){
let match = arr[j] + arr[j+1];
if(match==="()" || match==="{}" || match==="[]") {
arr=arr.replace(arr[j], "").replace(arr[j+1], "");
}
}
}
if(arr==="") {
return true;
}
else {
return false;
}
}
💬 s.slice() 하면 변한 게 없는데 왜 새로운 변수로 선언해주는가?
→ s로 풀게 되면 s의 값이 계속 변하게 되므로 오류가 생길 수 있다.