내가 연습하면서 만들어둔 code를 그대로 활용했다.
따라서 문제에서 요구하는 기능보다 조금 더 기능이 추가되었다.
stack을 이용해서 구현했고 아마 list를 이용해도 알고리즘 복잡도 차이가 없기 때문에 속도는 비슷할 것이다. list로 하는 것은 따로 구현하지 않았고 stack 자료구조 공부하려고 stack으로 풀었다.
class Node:
def __init__(self, data=None):
self.data = data
self.next = None
class Stack:
def __init__(self):
self.top = None
self.size = 0
def push(self, data):
node = Node(data)
self.size += 1
if self.top:
node.next = self.top
self.top = node
def pop(self):
if self.size == 0:
return None
self.size -= 1
data = self.top.data
self.top = self.top.next
return data
def check_brackets(bra):
stack = Stack()
for i in bra:
if i == ('(' or '{' or '['):
stack.push(i)
if i == (')' or '}' or ']'):
temp = stack.pop()
if temp == '(' and i ==')':
continue
elif temp == '{' and i == '}':
continue
elif temp == '[' and i == ']':
continue
else:
return False
if stack.size > 0:
return False
else:
return True
n = int(input())
for _ in range(n):
tc = sys.stdin.readline()
flag = check_brackets(tc)
if flag:
print('YES')
else:
print("NO")