Notice
Recent Posts
Recent Comments
Link
«   2024/10   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31
Archives
Today
Total
관리 메뉴

JustDoEat

[Python/String-Manipulation] Number of Valid Parenthesis 괄호문제 본문

카테고리 없음

[Python/String-Manipulation] Number of Valid Parenthesis 괄호문제

kingmusung 2023. 11. 26. 19:57

문제.

괄호가 올바른지 확인 하고, 올바른 괄호가 몇개가 있는지 출력을 하면 된다.

코드

class Stack:
    def __init__(self) -> None:
        self.item = []

    def is_empty(self):
        return not self.item

    def push(self, item) -> None:
        self.item.append(item)

    def pop(self):
        return self.item.pop()

    def reverse_pop(self):
        return self.pop()

    def peek(self):
        return self.item[-1]


def test_brackets(str):
    str_string = ''.join(char for char in str if char in '(){}[]')  # 괄호만 문자열에 넣어줌.
    str_list = list(str_string)
    open_stack = Stack()  # 열린 괄호
    close_stack = Stack()  # 닫힌 괄호
    count = 0
    is_valid = True  # 문자열이 아니라 불리언으로 초기화

    for items in str_list:
        if items in '}])':
            close_stack.push(items)
        else:
            open_stack.push(items)

    while not close_stack.is_empty() and not open_stack.is_empty():
        close_item = close_stack.pop()
        open_item = open_stack.reverse_pop()

        if close_item == ')' and open_item == '(':
            count += 1
        elif close_item == '}' and open_item == '{':
            count += 1
        elif close_item == ']' and open_item == '[':
            count += 1
        else:
            is_valid = False  # 문자열이 아니라 불리언으로 설정
      
    if not close_stack.is_empty() or not open_stack.is_empty(): #스택에 무언가 있으면 괄호가 잘못된거임.
        is_valid = False

    print(is_valid, count)


# 예시로 str_input = "[({(apple)banana})]" 가 입력 값이라 했을때 열린괄호,닫힌괄로를 각각 스택에 집어넣으면
# close_stack = ],),},)
# open_stack = (,{,(,[
# 이런 모양이므로 닫힌괄로는 뒤에서 부터 뽑고, 열린괄호는 앞에서부터 뽑아야 올바른 비교가 가능함.