function solution(s){
let stack = [];
for(let i = 0; i < s.length; i++){
if(stack.length === 0){
stack.push(s[i]);
continue;
}
if(stack[stack.length - 1] === s[i]){
stack.pop();
} else {
stack.push(s[i]);
}
}
if(stack.length === 0){
return 1;
}
return 0;
}
function solution(s){
let stack = [];
[...s].forEach((str) => {
if(stack.length === 0){
stack.push(str);
} else {
if(stack[stack.length - 1] === str){
stack.pop();
} else {
stack.push(str);
}
}
})
if(stack.length === 0){
return 1;
}
return 0;
}
두 방법 모두 같은 방식을 사용했다.
스택 구조를 활용하여,
스택의 가장 위에 있는 값과 넣으려고 하는 값이 같으면 스택에서 제거하고,
그렇지 않다면 스택에 넣는 것이다.
문자열을 순차적으로 사용하여 스택에 넣기 때문에,
2개가 이어진 문자열을 앞에서부터 차례대로 제거해나간다.
물론, 이 방법은 2개가 이어진 것에 대해서만 처리 중이므로, 그 이상의 문자열에 대해서는 유효하지 않다.
시간 복잡도는 for
가 forEach
보다 좋기 때문에 1번 풀이가 약 2배 정도 빠르다.