728x90
728x170
괄호 매칭 검사 프로그램
들어가며
- 스택을 활용하여 간단하게 괄호의 매칭 검사를 수행할 수 있다.
- 여는 괄호를 만나면 push 하고, 닫는 괄호를 만나면 pop 한다 는 규칙을 적용한 후, push 또는 pop 하는 과정에서 다음의 조건을 확인하면 된다.
① 닫는 괄호를 만났을 때 스택은 비어 있지 않아야 한다.
② 닫는 괄호를 만났을 때 추출한 괄호는 여는 괄호여야 한다.
③ ②를 만족해도 두 괄호의 종류(소괄호, 중괄호, 대괄호)가 같아야 한다.
④ 모든 수식의 처리가 끝나면 스택은 비어 있어야 한다.
- 열린 괄호라면 무조건 push 한다.
- 닫는 괄호일 때는 스택에서 하나를 꺼내서 현재 괄호와 짝이 맞는지 확인한다.
if '(', '[', '{', '<' 중 하나면
push()
elif ')', ']', '}', '>' 중 하나면
열린 괄호 pop()
if 두 괄호의 쌍이 맞으면
통과
else
오류
- 그리고 모든 수식의 글자를 처리한 후, 다음과 같이 스택이 비었는지 확인한다.
if 스택이 비었으면
정상
else
오류
프로그램 구현
def isStackFull() :
global SIZE, stack, top
if (top >= SIZE-1) :
return True
else :
return False
def isStackEmpty() :
global SIZE, stack, top
if (top == -1) :
return True
else :
return False
def push(data) :
global SIZE, stack, top
if (isStackFull()) :
print("스택이 꽉 찼습니다.")
return
top += 1
stack[top] = data
def pop() :
global SIZE, stack, top
if (isStackEmpty()) :
print("스택이 비었습니다.")
return None
data = stack[top]
stack[top] = None
top -= 1
return data
def peek() :
global SIZE, stack, top
if (isStackEmpty()) :
print("스택이 비었습니다.")
return None
return stack[top]
def checkBracket(expr) :
for ch in expr:
if ch in '([{<':
push(ch)
elif ch in ')]}>':
out = pop()
if ch == ')' and out == '(':
pass
elif ch == ']' and out == '[':
pass
elif ch == '}' and out == '{':
pass
elif ch == '>' and out == '<':
pass
else:
return False
else :
pass
if isStackEmpty() :
return True
else :
return False
SIZE = 100
stack = [ None for _ in range(SIZE) ]
top = -1
if __name__ == "__main__" :
exprAry = ['(A+B)', ')A+B(', '((A+B)-C', '(A+B]', '(<A+{B-C}/[C*D]>)']
for expr in exprAry :
top = -1
print(expr, '==>', checkBracket(expr))
더보기
(A+B) ==> True
스택이 비었습니다.
)A+B( ==> False
((A+B)-C ==> False
(A+B] ==> False
(<A+{B-C}/[C*D]>) ==> True
728x90
그리드형(광고전용)
'Source Code > Python' 카테고리의 다른 글
[Python] 1차원/2차원 배열의 중앙값 계산하기 (0) | 2022.06.28 |
---|---|
[Python] 10진수를 2진수/8진수/16진수로 변환하기 (0) | 2022.06.16 |
[Python] 회문/팰린드롬(Palindrome) 판단하기 (0) | 2022.06.16 |
[Python] 단순 연결 리스트(Singly Linked List) 프로그램 (0) | 2022.04.02 |
[Python] 다항식(Polynomial) 선형 리스트 표현과 계산 프로그램 (0) | 2022.03.26 |
[Python] 선형 리스트(Linear List) 처리 프로그램 (0) | 2022.03.26 |
[Python] 파일 입출력 예제 (0) | 2021.08.07 |
[Python] matplotlib 라이브러리를 이용하여 그래프 그리기 (0) | 2020.03.24 |