프로그래머스 문제를 풀던 중 이전에 문제를 풀었던 올바른 괄호인지를 판단하는 문제가 다시 등장했다. 그래서 이전과 같은 방식으로 풀이를 하려고 했는데, 세상이 그렇게 만만하지 않죠!!!!
이전문제와는 다른 문제가 있는데, 바로 여러 괄호가 등장한다는 것이다. 이전문제의 경우 ()
괄호만으로 이루어진 식을 판단하는 거였다면, 이번 문제의 경우 ()
,{}
,[]
모두 판단해야 한다.
어떻게 풀이를 할까 고민이 되었으나, 이전 괄호풀이를 참고해서 다행히 문제를 해결 할 수 있었다.
def solution(s):
try:
stack = []
for i in s:
if i == ")":
stack.pop()
else:
stack.append(i)
if len(stack) > 0:
return False
return True
except:
return False
이전 풀이의 경우 ()
괄호 밖에 없었기 때문에, 단순히 stack에 넣었다가 빼는 식으로 로직을 구현했고, 만약 pop시 없다면 예외처리로 false를 return 하게 했다.
def is_vaild(s):
stack = []
value = {
"}" : "{",
"]" : "[",
")" : "("
}
try:
for i in s:
if i =="{" or i =="[" or i =="(":
stack.append(i)
else:
if stack[-1] == value[i]:
stack.pop()
else:
return False
if len(stack) > 0:
return False
return True
except:
return False
괄호에 대한 짝을 만들고, 열으는 괄호라면 단순히 넣는다. 그리고 닫는 괄호가 올때 stack의 top과 닫는 괄호에 짝이 맞지 않는다면 return False 처리 하고, 만약 pop이 안된다면 위와 같이 예외처리로 False를 리턴한다.