개발자/알고리즘

짝지어 제거하기

YoungDogg 2022. 12. 17. 13:22

코딩테스트 연습 - 짝지어 제거하기 | 프로그래머스 스쿨 (programmers.co.kr)

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

처음엔 이중 반복문으로 풀었는데 시간 초과가 떴다.

 

스택이 답이라고 해서 스택으로 했다.

 

function solution(s)
{  
    const stack = []
    s = s.split('') 
    
    s.forEach((_,i,arr)=>{ 
        if(!stack.length || stack[stack.length-1] !== arr[i]){
            stack.push(arr[i])  
        } 
        else{
            stack.pop() 
        } 
    }) 
     
    return stack.length === 0 ? 1 : 0;
}

if(!stack.length || stack[stack.length-1] !== arr[i]){

이 부분이 어려웠다.

!stack.length  : '스택이 빈 공간이라면'이란 뜻이다

stack[stack.length-1] !== arr[i] : '스택의 맨 위 값과 반복문 안의 배열 요소가 다르다면'이란 뜻이다

 

else의 의미는 

스택이 빈 공간이 아니거나 스택 맨 위 값과 배열 요소가 같다는 뜻이다.

 


스택은 다른 문제에서도 쓸 수 있다.

1) 괄호 짝 맞는지

2) 깊이 탐색 때(길 찾기 등)