[javascript] 프로그래머스 레벨2 짝지어 제거하기

부주용·2022년 10월 11일
0

문제보기

function solution(s)
{
  let stack = [];
  let S = [...s];
  
  // s의 길이가 홀수면 짝지어 제거해도 최소 1개가 무조건 남아서 0 반환
  if (s.length % 2 !== 0) {
    return 0;
  }
  
  for (let i = 0; i < S.length; i++) {
    if (S[i] === stack[stack.length - 1]) {
      stack.pop();
      continue;
    } 
    
      stack.push(S[i])

    // 남은 문자의 갯수가 stack에 쌓여있는 갯수보다 적으면 이것또한 최소 1개가 남기에 0 반환
    if (stack.length > S.length - i) {
      return 0;
    }
  }
  return 1
}

아래는 원래풀이인데 정확도는 다 통과했으나 효율성에서 통과하지 못했다.
위에있는 풀이는 이미 지나간 문자열은 다시 검사하지 않지만 아래풀이는 짝지은걸 찾으면 다시 0번째 인덱스부터 찾기때문에 문자열의 길이가 늘어날수록 효율이 떨어진다.

  let i = 0;
  while (i < s.length) {
      if (s[i] === s[i + 1]) {
          let left = s.substring(0, i);
          let right = s.substring(i + 2, s.length)
          s = left + right
          i = 0;
      } else {
          i++;
      }
  }
  if (s.length > 0) {
    return 0
  } else {
    return 1
  }

0개의 댓글