프로그래밍-학습기록/코딩테스트

프로그래머스 | python | level 2 | 올바른 괄호

leesche 2020. 12. 22. 16:35
  • 어려울 줄 알았는데 쉽게 풀었다. 아이디어는 간단했다. "()"를 계속 삭제해가면 된다.

  • 그래서 처음엔 replace() 함수를 사용했다. 하지만 효율성 테스트를 통과하지 못했다.

  • 그래서 매번 문자열을 탐색에 중간 값을 삭제하는 replace가 아니라, 차례대로 탐색해가며 삭제하는 게 무엇이 있을까 생각했다. 오, 그렇다. 스택을 떠올렸다.

  • 스택을 사용했더니 효율성 테스트를 통과했다.

  • 가장 끝의 두 값이 완전한 괄호("()")가 되면 pop하여 없애는 방식으로 구현했다. 인덱스가 없어 오류가 생기는 경우를 처리하기 위해 try except 구문을 사용했다.

  • 첫 풀이, 효율성 테스트를 통과하지 못 했다.

      def solution(s):  # 올바른 괄호
          for _ in range(len(s)):
              s = s.replace("()", "")
          return len(s) == 0      
  • 스택을 활용한 풀이, 효율성 테스트를 통과했다.

      def solution(s):  # 올바른 괄호
          stack = []
          for element in s:
              stack.append(element)
              find_and_delete_pair_of_bracket(stack)
    
          return len(stack) == 0
    
      def find_and_delete_pair_of_bracket(stack):
          try:
              if stack[-2:] == ["(", ")"]:
                  stack.pop()
                  stack.pop()
          except:
              pass