처음 코드
function solution(s) {
let result = 0;
for (let i = 0; i < s.length; i++) {
if (check(s)) result++;
s = s.slice(s.length - 1) + s.slice(0, s.length - 1);
}
return result;
}
function check(s) {
let a = 0; // []
let b = 0; // {}
let c = 0; // ()
for (let i = 0; i < s.length; i++) {
if (s[i] === "[") a++;
else if (s[i] === "]") a--;
else if (s[i] === "{") b++;
else if (s[i] === "}") b--;
else if (s[i] === "(") c++;
else c--;
if (a < 0 || b < 0 || c < 0) return false;
}
return a === 0 && b === 0 && c === 0 ? true : false;
}
예전에 괄호 1종류만을 쓰는 비슷한 문제를 풀어봐서
이번에도 같은 방법으로
괄호 여는것이 나오면 ++
괄호 닫는것이 나오면 --
음수로 떨어지는 순간 false, 마지막에 0이면 true로 했는데
테스트 케이스 1개만 통과가 안된다
괄호가 3종류다 보니까 '( [ ) ]'같은 경우 옳지못한 괄호이지만
내가 만든 함수에서는 true가 출력되서 그렇다
그래서 stack을 이용해서 짝이 맞는 괄호끼리 없애고 0이여야지 true로 다시 만들었다
코드
function solution(s) {
let result = 0;
for (let i = 0; i < s.length; i++) {
console.log("object");
if (check(s)) result++;
s = s.slice(s.length - 1) + s.slice(0, s.length - 1);
}
return result;
}
function check(s) {
let stack = [];
for (let i = 0; i < s.length; i++) {
if (stack[stack.length - 1] === "[" && s[i] === "]") stack.pop();
else if (stack[stack.length - 1] === "(" && s[i] === ")") stack.pop();
else if (stack[stack.length - 1] === "{" && s[i] === "}") stack.pop();
else stack.push(s[i]);
}
return stack.length ? false : true;
}