function solution(s){
const newArr = s.split('')
for(let i = 0; i < newArr.length; i++){
if(newArr[i] === newArr[i+1]){
newArr.splice(i, 2)
i = -1
}
}
return newArr.length ? 0 : 1
}
풀이의 문제점
테스트케이스의 문자열이 짧다면 무리없이 실행되겠지만, 길이가 1,000,000이라면 같은 요소를 만나면 다시 처음으로 돌아가는 방식은 상당히 무리가 된다.
function solution(s){
const newArr = s.split('')
function recur(arr){
for(let i = 0; i < arr.length; i++){
if(arr[i] === arr[i+1]){
arr.splice(i, 2)
}
}
}
recur(newArr)
return newArr.length ? 0 : 1
}
그래서 재귀함수를 사용해봤다. 몇몇 런타임에러나는 경우는 뭐가 잘못된건지 파악못했지만, 확실히 통과하는 케이스는 빠르게 통과한다. 하지만 효율성에서는 꽝이었다. 여전히 반복문을 처음부터 시작하는 건 똑같아서 그런듯하다.
그래서 스택으로 풀이하는 여러 답안을 봤다.
const solution = (s) => {
if (s.length % 2 != 0) return 0;
const stack = [];
for (let i = 0; i < s.length; i++) {
const b = s.charAt(i);
if (stack[stack.length - 1] === b) {
stack.pop();
} else {
stack.push(b);
}
}
return stack.length > 0 ? 0 : 1;
};