괄호가 바르게 짝지어졌다는 것은 '(' 문자로 열렸으면 반드시 짝지어서 ')' 문자로 닫혀야 한다는 뜻입니다. 예를 들어
"()()" 또는 "(())()" 는 올바른 괄호입니다.
")()(" 또는 "(()(" 는 올바르지 않은 괄호입니다.
'(' 또는 ')' 로만 이루어진 문자열 s가 주어졌을 때, 문자열 s가 올바른 괄호이면 true를 return 하고, 올바르지 않은 괄호이면 false를 return 하는 solution 함수를 완성해 주세요.
제한사항
문자열 s의 길이 : 100,000 이하의 자연수
문자열 s는 '(' 또는 ')' 로만 이루어져 있습니다.
학부생때 자료구조 시간에 접할 수 있는 대표적인 스택 문제라고 한다.
올바른 괄호가 되기 위해서 스택을 이용한다. 스택에는 "("기호만 넣을 것이다.
문자열에서 문자를 순서대로 꺼내면서 문자가 "("일 경우에는 스택에 넣는다. 그리고 이후에 ")"문자가 왔을 때 스택이 비어있지 않으면 pop함수를 통해 스택에서 값을 하나 뺀다.
def check_right_or_not(s):
stack = []
for value in s:
if value == "(":
stack.append("(")
elif value == ")":
if stack:
stack.pop()
else:
return False
if stack:
return False
return True
문제 해결을 위한 스킬
if stack: # 스택이 비어있으면 False, # 값이 있으면 True 값이다.
프로그래머스에는 문제를 유형별로 분류가 되어있다. 백준에서 한 유형의 문제만 풀고 싶을 때는 찾기가 좀 어려운데 프로그래머스는 이게 잘 되어있는 것 같다. 먼저 프로그래머스를 이용하는 것도 방법인 것 같다.