https://programmers.co.kr/learn/courses/30/lessons/76502
function solution(s) {
let stack = Array.from(s);
var answer = 0;
for (let i = 0; i < stack.length; i++) {
let st = [];
for (let j = 0; j < stack.length; j++) {
st.push(stack[j]);
console.log(`before : ${st}`);
if ((st[st.length - 2] === "(" && st[st.length - 1] === ")") ||
(st[st.length - 2] === "{" && st[st.length - 1] === "}") ||
(st[st.length - 2] === "[" && st[st.length - 1] === "]")) {
st.pop();
st.pop();
}
console.log(`after : ${st}`);
}
if (st.length == 0) answer++;
//console.log(answer);
let first = stack.shift();
stack.push(first);
//console.log(stack.toString())
}
return answer;
}
let s = "[](){}";
console.log(solution(s));
예전에 비슷한걸 풀어본 적있어서 쉽게 접근했던거 같다. stack을 이용해서 풀었다.
먼저 문자열 s를 배열로 복사하고, 배열길이만큼 반복한다. (왼쪽 회전을 위해서)
짝이 맞으면 지우고, 안맞으면 그대로 둘 stack st를 만들고, stack을 돈다.
먼저 현재위치의 글자를 넣고, (,{.[
각각 짝이 맞는 경우 그 두가지를 pop해서 지운다.
마지막에 반복이 끝나고 st가 비어져있다면 answer에 +1.
그 다음 가장 앞에 친구를 빼서 마지막에다 넣어서 다시 반복해서 답을 도출해낸다.