bj9012 괄호찾기

coh·2022년 5월 25일
0

백준

목록 보기
11/27

내가 연습하면서 만들어둔 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")
profile
Written by coh

0개의 댓글