-
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))'))
'(' 외에도 '[', '{'까지 괄호의 종류가 다양한데요.
이런 것까지 검사할 수 있게 바꿔 보는 것도 좋겠습니다.
반응형