출처: https://wikidocs.net/223100
소괄호는 짝을 맞춘 열린 괄호 ‘(’와 닫힌 괄호 ‘)’로 구성합니다. 문제에서는 열린 괄호나 닫힌 괄호가 마구 뒤섞인 문자열을 줍니다.
이때 소괄호가 정상으로 열고 닫혔는지 판별하는 solution( ) 함수를 구현하세요. 만약 소괄호가 정상적으로 열고 닫혔다면 True를, 그렇지 않다면 False를 반환하면 됩니다.
제약조건
열린 괄호는 자신과 가장 가까운 닫힌 괄호를 만나면 상쇄됩니다.
상쇄 조건은 열린 괄호가 먼저 와야 하고, 열린 괄호와 닫힌 괄호 사이에 아무것도 없어야 합니다.
더 상쇄할 괄호가 없을 때까지 상쇄를 반복합니다.
입출력의 예
def solutions(s):
stack = []
for c in s: # 문자열을 앞에서 하나씩 보며 열린 괄호가 나오면 push
if c == "(":
stack.append(c)
elif c == ")": # 닫힌 괄호가 나오면 pop 연산을 통해 문자열에서 열린 괄호, 닫힌 괄호 한 쌍을 상쇄
if not stack:
return False
else:
stack.pop()
# 1~2를 마지막 문자열까지 반복해 스택에 열린 괄호가 남아 있다면 짝이 맞지 않은 것(False)이고,
# 괄호가 남아 있지 않다면 짝이 맞은 것(True)으로 판단
if stack:
return False
else:
return True