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

2023. 1. 31. 16:31기록/Programmers

    목차

문제 링크

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

 

프로그래머스

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

programmers.co.kr


나의 문제 풀이

function solution(s) {
    const stack = [];
    
    for (let i = 0; i < s.length; i++) {
        if (stack[stack.length - 1] === s[i]) {
            stack.pop();
        } else {
            stack.push(s[i]);
        }
    }
    
    return stack.length === 0 ? 1 : 0;
}
  • 0부터 주어진 문자열 s의 길이보다 작을때 까지 1씩 증가하며 반복함
  • stack 배열의 마지막 요소가 현재 순회 요소와 동일할 경우
    • stack 배열의 마지막 요소를 제거함 (같은 문자를 짝지어 제거함)
  • 동일하지 않을 경우
    • stack 배열의 끝에 현재 순회 요소를 넣음 (다음 순회에서 해당 요소를 비교하기 위함)
  • stack 배열의 길이가 0일 경우 모든 문자를 짝지어 제거한 것이므로 1을 리턴함
  • 0이 아닐 경우 배열에 짝지으지 못한 문자가 남아있는 것이므로 0을 리턴함

다른 사람의 문제 풀이

const solution = (s) => {
  if (s.length % 2 != 0) return 0;
  const stack = [];
  for (let i = 0; i < s.length; i++) {
    const b = s.charAt(i);
    if (stack[stack.length - 1] === b) {
      stack.pop();
    } else {
      stack.push(b);
    }
  }

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