주어진 입력에서 괄호 {}, ()가 제대로 짝을 이뤘는지 검사하는 프로그램을 만드시오.
예를 들어 {( )}는 제대로 된 짝이지만, {( })는 제대로 된 짝이 아니다. 입력은 한 줄의 파이썬 코드일수도 있고, 괄호만 주어질 수도 있다.
정상적으로 짝을 이룬 경우 1, 그렇지 않으면 0을 출력한다.
print(‘{‘) 같은 경우는 입력으로 주어지지 않으므로 고려하지 않아도 된다.[입력]
첫 줄에 테스트 케이스 개수 T가 주어진다. 1≤T≤50
다음 줄부터 테스트 케이스 별로 온전한 형태이거나 괄호만 남긴 한 줄의 코드가 주어진다.
3 print('{} {}'.format(1, 2)) N, M = map(int, input().split()) print('#{} {}'.format(tc, find())
[출력]
각 줄마다 "#T" (T는 테스트 케이스 번호)를 출력한 뒤, 답을 출력한다.
#1 1 #2 1 #3 0
문자열을 입력 받아 왼쪽괄호를 만나면 스택에 삽입,
오른쪽 괄호를 만나면 스택에서 top괄호(맨위에있는 왼쪽괄호)를 pop()하여 오른쪽 괄호와 짝이 >맞는지 확인한다.
이후 3가지 조건을 확인하여 조건에 해당되면 결과 0 반환하도록한다.조건 1 : 스택이 비어있음
조건 2 : 괄호의 짝이 맞지 않음
조건 3 : 문자열 끝까지 조사한 후에도 스택에 괄호가 남아있음
def bracket_test(input_str):
stack = []
result = 1
for i in input_str:
if i == '{' or i == '(':
stack.append(i)
elif i == '}' or i == ')':
if len(stack) == 0: # 조건 1
result = 0
break
elif i == '}' and stack.pop() == '(': # 조건 2
result = 0
break
elif i == ')' and stack.pop() == '}': # 조건 2
result = 0
break
if len(stack): # 조건 3
result = 0
return result
T = int(input())
for test_case in range(1, T+1):
input_str = input()
print("#{} {}".format(test_case, bracket_test(input_str)))