본문 바로가기
Coding Test/JavaScript

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

by Chaedie 2022. 9. 28.
728x90

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

💡 구글에 Javascript 풀이가 많이 없거나, 배운 점이 있으면 포스팅합니다.

내 풀이

function solution(s)
{
    const stack = [''];

    for (let i = 0; i < s.length; i++) {
        let curIndex = stack.push(s[i]) - 1;

        if (stack[curIndex - 1] === stack[curIndex]) {
            stack.pop();   
            stack.pop();   
        }                
    }

    return stack.length === 1 ? 1 : 0;
}
  • 투포인터로 돌리려고 코드를 짜고 있었습니다.
    • 근데 갑자기 이게 도대체 뭐하는 짓이지… 라는 현타가 오면서 더 좋은 방법이 없을까? 생각하게 되었습니다.
  • 그리하여 생각한게 “올바른 괄호” 문제처럼 배열을 스택처럼 사용해서 같으면 pop할 수 있지 않을까? 생각하게 되었습니다.
    • 지금 생각하니 이 아이디어는 “카카오 인형 뽑기” 문제와도 유사하네요.
  • 풀이 설명
    • 1) 스택이 아예 비면 현재 인덱스 -1 을 했을 때 stack[-1] 에 접근해버리니 첫 번째는 빈 문자열로 채워 놓고 시작합니다.
    • 2) 배열에 push()하면 return 값으로 배열의 길이가 나온다는걸 이용해서, length -1로 현재 인덱스를 구합니다.
    • 3) 스택에 현재 인덱스와 이전 인덱스의 문자가 같으면 둘다 pop() 해줍니다.
    • 4) 반복 ⇒ 스택이 빈 문자열만 남으면 짝이 다 맞는거네요.

배운 점, 느낀 점

  • 완전 탐색으로 접근하다가 이거 좀 아닌데… 구현 좀 빡센데… 하면 다른 좋은 방법이 있는거네요.
  • 매일 풀어보면서 다양한 좋은 풀이를 경험 해야겠습니다.

댓글