[프로그래머스] Lv2 - 짝지어 제거하기

제리·2021년 1월 20일
0

프로그래머스

목록 보기
22/25

https://programmers.co.kr/learn/courses/30/lessons/12973

function solution(s)
{
    var answer = 0;
    let stack = []

    let arr = s.split('')

    arr.forEach((v,i)=>{
        let top = stack[stack.length-1]
        if(top == v){
            stack.pop()
        }
        else{
            stack.push(v)    
        }
    })

    
    
    return stack.length == 0 ? 1 : 0;
}

처음에는 이런식으로 스택을 사용하여 현재 문자와 스택에서 가장 마지막에 추가된 문자(top)와 같으면 스택에 안넣고 마지막에 있던 문자도 pop 한것을 끝까지 반복한뒤에 스택길이를 체크하는 방식으로 풀었는데, 딱 하나의 케이스에서 시간초과가 났다.
반복문을 하나밖에 사용하지 않았고 간단한 스택연산이기에 시간복잡도는 O(N)으로 생각했기다. 따라서 눈에들어온것은 forEach를 사용하기 위해 문자열을 배열로 바꾸는 split연산이었다. 이 연산이 O(N)정도 걸리는것을 파악해서 이것을 일반 반복문으로 바꿔서 풀었다.

function solution(s)
{
    var answer = 0;
    let stack = []

   for(let i = 0; i < s.length; i++){
        let v = s[i]
        let top = stack[stack.length-1]
        if(top == v){
            stack.pop()
        }
        else{
            stack.push(v)    
        }
    }
    
    return stack.length == 0 ? 1 : 0;
}

결과는 이렇게 푸니까 시간초과나는 테케를 통과할 수 있었다.
사실 결과창에서 확인해보니 시간차이가 별로 나진 않았으나, 실제 코딩테스트에서는 시간복잡도를 좀 더 디테일하게 체크해 볼 필요가 있음을 느꼈다.

profile
흐릿한 잉크가 뚜렷한 기억보다 낫다

0개의 댓글