본문 바로가기

알고리즘/test

LIFO - example 1

def isValid(s):
  stack = []
  for p in s:
    if p == "(":
      stack.append(")")
    elif p == "{":
      stack.append("}")
    elif p == "[":
      stack.append("]")
    elif not stack or stack.pop() != p:
      return False
  return not stack

이 문제는 문자의 괄호의 상태가 올바른지에 대한 함수 입니다.

stack을 사용하여 LIFO문제를 풀었습니다.

올바른 괄호가 되기 위해서는 ( { [ 여는 괄호가 들어왔을때 stack의 가장 윗부분이 마지막에 들어온 괄호와 맞아야 합니다.

혹은 닫는괄호 ) } ]가 먼저 들어온 경우에도 맞지 않기 때문에 False를 return 합니다.

for문을 다 돌았을때 stack에 아무 문자도 남아있지 않다면 올바른 괄호배열이기때문에 True를 return하게 됩니다