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 = (,{,(,[
# 이런 모양이므로 닫힌괄로는 뒤에서 부터 뽑고, 열린괄호는 앞에서부터 뽑아야 올바른 비교가 가능함.