[프로그래머스 | Javascript] 짝지어 제거하기

박기영·2023년 1월 12일
0

프로그래머스

목록 보기
119/159
post-custom-banner

solution 1

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;
}

solution 2

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개가 이어진 것에 대해서만 처리 중이므로, 그 이상의 문자열에 대해서는 유효하지 않다.

시간 복잡도는 forforEach보다 좋기 때문에 1번 풀이가 약 2배 정도 빠르다.

profile
나를 믿는 사람들을, 실망시키지 않도록
post-custom-banner

0개의 댓글