본문 바로가기
알고리즘

[프로그래머스] 짝지어 제거하기 (stack)

by limew 2023. 6. 8.

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

첫번째

처음에 for 돌려서 str[i] , str[i+1] 같은게 나오면 splice한뒤 다시 첨부터 확인하는 방법을 생각했다

splice가 리턴하는건 잘라진 부분,

splice는 원래를 바꿈

splice(시작 인덱스, 삭제 개수)

 

답은 다 맞았는데 n^2 여서 시간초과

생각해보니 내가 꼬아서 생각하고 있었다....=_=

function solution(s)
{
    const arrS = [...s];
    while(arrS.length > 0) {
        let hasPair = false;
        for (let i = 0; i < arrS.length-1; i++) { // n
            // 짝이 있다
           if (arrS[i] === arrS[i+1]) {
               arrS.splice(i, 2); // 여기서 ... 를 써서 splice하면 새로운 s를 만들어내서 안 잘려짐 // n
               hasPair = true;
               break;
           }
        }
         // 짝이 없다
        if (!hasPair) {
            return 0;
        }
    }
    return 1;
}

 

두번째

짝지어서 없애기? 스택이자나!!

function solution(s)
{
    const stack = [];
    for (const char of s) {
        // 빈 스택엔 넣기
        if (stack.length === 0) {
            stack.push(char);
            continue;
        }
        if (stack[stack.length-1] === char) {
            stack.pop();
        } else {
            stack.push(char);
        }
    }
    return stack.length === 0 ? 1 : 0
}