문자열 s가 올바른 괄호이면 true를 return 하고, 올바르지 않은 괄호이면 false를 return
올바른 괄호: '(' 문자로 열렸으면 반드시 짝지어서 ')' 문자로 닫힌 것
제한사항
s의 길이 : 100,000 이하의 자연수
s는 '(' 또는 ')' 로만 이루어져 있음
"""
입출력 예시)
s = "()()" -> true
s = "(())()" -> true
s = ")()(" -> false
s = "(()(" -> false
"""
## 의사코드 ##
# 후입선출 -> 스택
# 스택에 문자열 s 삽입
# if 스택.pop() == ')' and 스택[0] == '(':
# True
# else:
# False
첫 번째 시도
def solution(s):
stack = list(s)
if stack.pop() == ')' and stack[0] == '(':
return True
else:
return False
-> 추가 테스트 케이스 실패(런타임 에러), 효율성 테스트 하나 실패
통과한 코드
def solution(s):
stack = [] # 빈 스택 생성
for i in s:
if i == '(': # '('로 괄호가 열린 경우
stack.append(i) # 스택에 추가
else: # ')'로 괄호가 닫힌 경우
if len(stack) == 0: # 스택이 비어있으면 (= 꺼낼 문자가 없는 경우)
return False
else: # 스택이 비어있지 않으면
stack.pop() # 아까 들어간 스택의 '('를 하나 꺼냄
return len(stack) == 0 # 스택이 비어있으면 True, 그렇지 않다면 False
-> 스택에 한 번에 문자열 s를 다 추가하는 것이 아니라 '('로 괄호가 열린 경우만 추가하고, 스택에 원소가 존재하면서 ')'로 닫힌 괄호인 경우에 스택의 원소를 하나씩 꺼냄