풀이 과정
- 배열의 길이만큼 반복
- 문자열의 각 문자에 대해 반복
- 현재 문자가 스택 이전 마지막 요소와 매칭되는 닫는 괄호면 스택 pop
아니면 현재 문자를 스택(배열)에 담기
- 1번의 각 반복을 마치고 스택에 남은 값이 없으면 결과 +1
- 1번의 각 반복을 마칠 때마다 문자열 회전:
slice()
코드
function solution(s) {
let result = 0;
for (let i = 0; i < s.length; ++i) {
const stack = [];
for (const c of s) {
const last = stack.at(-1);
if (last === '(' && c === ')') stack.pop();
else if (last === '[' && c === ']') stack.pop();
else if (last === '{' && c === '}') stack.pop();
else stack.push(c);
}
if (!stack.length) ++result;
s = s.slice(1) + s[0];
}
return result;
}