function solution(s) {
let length = s.length;
let point = 0;
function search(str) {
let arr = [];
for (let i = 0; i < str.length; i++) {
arr.push(str[i]);
if (arr[arr.length - 1] === "]") {
if (arr[arr.length - 2] === "[") {
arr.pop();
arr.pop();
}
} else if (arr[arr.length - 1] === ")") {
if (arr[arr.length - 2] === "(") {
arr.pop();
arr.pop();
}
} else if (arr[arr.length - 1] === "}") {
if (arr[arr.length - 2] === "{") {
arr.pop();
arr.pop();
}
}
}
if (arr.length === 0) {
point++;
}
}
s = s.split("");
for (let i = 0; i < length; i++) {
search(s);
let temp = s.shift();
s.push(temp);
}
return point
}
그렇게 많이 어렵게 느껴지지는 않았다.
검증을 하는 부분 즉 search함수 부분이 좀 비효율적이기는 하지만
그래도 뭐 나름 만족을 한다.
로직이 진행되는 과정은 간단하다.
search
함수는 들어오는 배열의 괄호형태가 맞는지를 확인하고 처리를 해준다.
이후 search
내부 변수의 배열에 값이 들어가 있지 않으면 괄호형태가 성공적으로 맞은 것이다.
그러기 떄문에 point변수를 증가시켜준다.
괄호의 이동또한 어렵지 않다.
앞에있는것을 뺴고 뒤에 넣어주면 된다.
또한 search함수 부분의 검증하는 것도 간단하게 할 수가 있는데 일단 정답이 맞으니깐 ㅎㅎ 이상태로 두겠다.