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

알고리즘 - 스택

Posted by Kyun2da on June 28, 2020

1️⃣서론

프로그래머스 level2 문제 짝지어 제거하기입니다. Javascript를 이용하여 해결하였습니다.

2️⃣문제 설명

피보나치

3️⃣풀이

이 문제는 어떻게 문자열을 짝지어 제거할때 검사를 어떻게 효율적이게 하느냐에 따라 시간초과가 날 수도 있고 통과할 수도 있는 문제입니다. 처음에는 스택을 전혀 생각 못하고 그냥 제거한뒤에 제거한 자리의 앞으로 가서 다시 for문을 순회하는 방법을 사용했습니다. 하지만 이렇게 했더니 시간초과가 났고 스택을 사용해야 통과하였습니다. 초기코드와 최종코드를 보겠습니다.

4️⃣ 초기 소스코드

시간초과 발생

1
2
3
4
5
6
7
8
9
10
11
12
13
14
const solution = (s) => {
  let answer = 0;
  for (let i = 0; i < s.length - 1; i++) {
    if (s[i] === s[i + 1]) {
      s = s.substr(0, i) + s.substr(i + 2);
      i -= 2;
    }
    console.log(s);
  }
  if (s === "") {
    return 1;
  }
  return 0;
};

5️⃣ 최종 소스코드

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
const solution = (s) => {
  const stack = [];

  for (let i = 0; i < s.length; i++) {
    if (stack.length === 0 || stack[stack.length - 1] !== s[i]) {
      stack.push(s[i]);
    } else {
      stack.pop();
    }
  }

  if (stack.length === 0) {
    return 1;
  }
  return 0;
};

6️⃣ 결론

이 문제는 스택을 생각하는 것이 그리 쉽지는 않았던 것 같습니다. 어떤 자료구조를 써야하는 지에 대한 힘을 더 길러야 겠다는 생각이 듭니다.

7️⃣ 마치며..

질문과 지적은 환영합니다. 이 문제는 최적의 정답일 수도 아닐수도 있습니다.
궁금한게 있으시면 아래 댓글 남겨주세요.🙏
댓글은 저에게 큰 힘이 됩니다!
감사합니다. ❤️