s는 여러 괄호들로 이루어진 String 인자입니다.
s가 유효한 표현인지 아닌지 true/false로 반환해주세요.
종류는 '(', ')', '[', ']', '{', '}' 으로 총 6개 있습니다. 아래의 경우 유효합니다.
예를 들어 아래와 같습니다.
s = "()"
return true
s = "()[]{}"
return true
s = "(]"
return false
s = "([)]"
return false
s = "{[]}"
return true
def is_valid(string):
stack = []
check_list = {'{':'}', '[':']', '(':')'}
for s in string:
# 스택에 아무것도 없으면
if not len(stack):
# 여는 괄호가 나오면 스택에 추가
if s in check_list.keys():
stack.append(s)
continue
# 닫는 괄호가 나오면 쌍을 이룰 수 없음. False 리턴
else:
return False
# 여는 괄호가 나오면 스택에 추가
if s in check_list.keys():
stack.append(s)
# 닫는 괄호가 나오면 이전 괄호가 자신의 쌍이 맞는지 확인 후 맞으면 삭제
else:
if check_list[arr[-1]] == s:
arr.pop()
# 쌍이 맞지 않으면 더이상 진행 불가. False 리턴
else:
return False
# 전체 괄호를 돌고 더이상 남아있는 괄호가 없으면 모두 쌍이 맞음. True 리턴
if arr:
return False
else:
return True
arr = '(()){}'
print(is_valid(arr))