[출처] : https://programmers.co.kr/
괄호가 바르게 짝지어졌다는 것은 '(' 문자로 열렸으면 반드시 짝지어서 ')' 문자로 닫혀야 한다는 뜻입니다. 예를 들어
'(' 또는 ')' 로만 이루어진 문자열 s가 주어졌을 때, 문자열 s가 올바른 괄호이면 true를 return 하고, 올바르지 않은 괄호이면 false를 return 하는 solution 함수를 완성해 주세요.
대표적인 스택 문제이다
스택을 하나만들고 반복문을 이용해서 주어진 문자열을 하나씩 뽑는다
만약 '(' 이거라면 스택에 넣고 이 모양이 아닌 ')' 이 모양일 경우에는 스택을 확인한다
스택을 확인했을때 크기가 0 즉 스택에 아무것도 없다면 ')' 이 모양이 처음으로 들어왔으므로 False를 리턴해주면 된다
스택이 비어있지 않다면 pop()연산을 이용해서 저장된 '(' 이 모양을 꺼내준다.
그렇게 되면 완전한 괄호가 된다.
이런식으로 입력으로 주어진 문자열의 끝까지 돌고나서 스택을 확인했을때 비어있다면 짝이 다 맞았다는 것이므로 True를 리턴하고, 스택을 확인했을때 비어있지 않다면 짝이 맞지 않는것이므로 False를 리턴하면된다.
*이런 문제는 보자마자 스택을 이용해야 된다는 것을 바로 떠올릴수 있도록 연습하자
def solution(s):
answer = True
stack = []
for i in s:
if i =="(":
stack.append(i)
else:
if len(stack) ==0:
return False
else:
stack.pop()
if len(stack) == 0: return True
else: return False