function solution(s)
{
let stack = [];
let S = [...s];
// s의 길이가 홀수면 짝지어 제거해도 최소 1개가 무조건 남아서 0 반환
if (s.length % 2 !== 0) {
return 0;
}
for (let i = 0; i < S.length; i++) {
if (S[i] === stack[stack.length - 1]) {
stack.pop();
continue;
}
stack.push(S[i])
// 남은 문자의 갯수가 stack에 쌓여있는 갯수보다 적으면 이것또한 최소 1개가 남기에 0 반환
if (stack.length > S.length - i) {
return 0;
}
}
return 1
}
아래는 원래풀이인데 정확도는 다 통과했으나 효율성에서 통과하지 못했다.
위에있는 풀이는 이미 지나간 문자열은 다시 검사하지 않지만 아래풀이는 짝지은걸 찾으면 다시 0번째 인덱스부터 찾기때문에 문자열의 길이가 늘어날수록 효율이 떨어진다.
let i = 0;
while (i < s.length) {
if (s[i] === s[i + 1]) {
let left = s.substring(0, i);
let right = s.substring(i + 2, s.length)
s = left + right
i = 0;
} else {
i++;
}
}
if (s.length > 0) {
return 0
} else {
return 1
}