https://school.programmers.co.kr/learn/courses/30/lessons/12909
참고로 이 문제는 취준을 시작하고 처음으로 봤던 코테에서 나왔던 문제와 유사하다. 그래서 더 기억에 남는 듯 하다 😎 (실제 코테 때는 이 문제보다 요구 조건이 더 복잡하긴 했다.)
s 배열에서 '(' 괄호를 만나면 stack에 append, ')' 괄호를 만나면 pop하는 형식으로 진행했다.
False가 되는 조건은 다음과 같다.
1) pop 해야 하는데 stack이 비어 있는 경우
: 스택의 길이가 0인 경우 해당한다.
2) 모든 작업을 완료했는데, stack의 길이가 0보다 큰 경우
: 여는 괄호인 '('가 남아 있는 경우이다.
위 두 가지 케이스에 해당하면 False를 리턴하고, 나머지 경우는 True를 리턴한다.
def solution(s):
answer = True
stack = []
for i in s:
if i == '(':
stack.append(i)
elif i == ')':
if len(stack) == 0:
return False
else:
stack.pop()
# 괄호 쌍을 모두 뺐는데도 stack에 (가 남아있다면, False를 리턴
# 닫는 괄호가 부족한 상황임
if len(stack) > 0:
return False
return True