ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 11. 스택을 이용한 괄호(bracket) 체크, 파이썬
    Python/파이썬 자료구조 알고리듬 2019. 6. 6. 12:19
    반응형

    수식에 열고 닫는 괄호 쌍을 체크할 때도
    스택을 이용할 수 있습니다. 

     

    수식을 인자로 받아 수식에 괄호가 빠졌을 때 나
    홀로 있는 괄호의 위치를 반환하는 함수를 구현해 봅시다. 

     

    예를 들자면 '2.4 + 23/12 + (3.141592 * .21'

     

    코딩해 보죠.. 

     

    def check_bracket(text):
        stack = []
        for i in range(len(text)):
            if text[i] == '(':
                stack.append(i)
            elif text[i] == ')':
                stack.pop()
        return stack
    
    
    print(check_bracket('2.4 + 23/12 + (3.141592 * .21'))
    

     

    간단히 개념만 잡는 정도로 작성해 보았습니다. 

     

    위 코드의 경우 문제가 있습니다.

    주어진 문자열에서 '('가 빠진 경우엔, 빈 스택에 pop을 실행하니 에러가 나오겠죠?

    어떡하면 이걸 해결할 수 있을까요?

     

    파이썬 스타일로 코딩해 봅니다. 

    파이썬의 for 문은 enumerate(열거하다)를 사용해서 인덱스와 요소를 얻을 수 있습니다.

    단 아래 예는 ')'의 숫자가 많을 때 첫 번째 실수(mistake)만 찾을 수 있습니다. 

    def check_bracket(text):
        stack = []
        for idx, letter in enumerate(text):
            if letter == '(':
                stack.append(idx)
            elif letter == ')':
                if stack:
                    stack.pop()
                else:
                    stack.append(idx)
                    return stack
        return stack
    
    
    print(check_bracket('2.4 + 23/12 + (3.141592 * .21))'))
    

    '(' 외에도 '[', '{'까지 괄호의 종류가 다양한데요.

    이런 것까지 검사할 수 있게 바꿔 보는 것도 좋겠습니다. 

    반응형
Designed by Tistory.