괄호가 바르게 짝지어졌다는 것은 '(' 문자로 열렸으면 반드시 짝지어서 ')' 문자로 닫혀야 한다는 뜻입니다. 예를 들어
'(' 또는 ')' 로만 이루어진 문자열 s가 주어졌을 때, 문자열 s가 올바른 괄호이면 true를 return 하고, 올바르지 않은 괄호이면 false를 return 하는 solution 함수를 완성해 주세요.
s answer
"()()" true
"(())()" true
")()(" false
"(()(" false
입출력 예 설명
입출력 예 #1,2,3,4
문제의 예시와 같습니다.
며칠전에 풀었던 괄호 문제보다 확실히 쉬운 문제였기 때문에 그 풀이법을 떠올리며 풀어보았다. 우선 괄호의 처리는 스택의 처리와 같다는 것을 기억해야 한다. 이 문제 역시 스택을 이용하여 해결하였다. 우선 s를 리스트로 만들어주고, s_list를 pop하여 임시 변수에 저장해준다. 임시변수가 만약 닫는 괄호라면 stack에 저장해주고 닫는 괄호가 아닐 경우 stack이 비어있다면 짝이 맞지 않는 것이므로 False를 반환하고, stack이 비어있지 않다면 stack을 pop해준다. 여기서 stack에는 닫는 괄호만 들어가게 되는 것이다.
def solution(s):
stack=[]
s_list=list(s)
for i in range(len(s_list)):
tmp=s_list.pop()
if tmp==')':
stack.append(tmp)
else:
if not stack:
return False
else:
stack.pop()
if stack:
return False
return True