프로그래머스 짝지어 제거하기(lv2,

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


문제 접근

조건에 따라 모든 문자열을 제거할 수 있으면 1을 반환하고 그렇지 않으면 0을 반환하는 함수를 구현하는 문제.

아이디어

  • 문자열 길이가 10^6이므로 O(n+@) 시간복잡도로 풀어야 합니다.
  • 중복된 for문으로 각각 완전검색을 해보았지만 구현이 복잡하고 시간 복잡도 때문에 불가능하다.
  • 이전 문자와 다음 문자를 비교한다는 점에서 올바른 괄호 문제와 유사한 것으로 간주됩니다. -> 스택을 사용합니다.
  • 문자열을 스택에 푸시하고 동일한 문자가 발생하면 제거하는 형식으로 구현됩니다.

올바른 응답 코드

def solution(s):
    if len(s) % 2 !=0:
        return 0
    stack = ()
    
    for i in range(len(s)):
        if len(stack) == 0 or stack(-1) != s(i):
            stack.append(s(i))
        elif s(i) == stack(-1):
            stack.pop()
            

    
    
    return 1 if len(stack) == 0 else 0