s = "()"
return true
s = "()[]{}"
return true
s = "(]"
return false
s = "([)]"
return false
s = "{[]}"
return truedef is_valid(string):
  if not string or len(string) == 1:
    return False
  
  a_dic = {"(": 1, "[": 1, "{": 1, ")": 0, "]": 0, "}": 0}
  b_dic = {")": "(", "}": "{", "]": "["}
  temp = []
  
  for index in range(len(string)):
    if index == 0 and a_dic[string[index]] == 0:
      return False
    
    if a_dic[string[index]] != 0:
      temp.append(string[index])
    else:
      if temp[-1] != b_dic[string[index]]:
        return False
      else:
        temp.pop()
  
  return True이 문제는 뭔가 풀릴 듯 말듯 하여 1시간 30분을 잡고 있었던 문제이다.
괄호가 닫혔을 때 해당 괄호의 쌍을 찾기 위하여 아래와 같은 딕셔너리를 만든 것이 좋았던 것 같다.
  b_dic = {")": "(", "}": "{", "]": "["}하지만, 효율적인 코드라고 느껴지지 않았다.
def is_valid(string):
    left = ['(', '{', '[']
    right = [')', '}', ']']
    stack = []
    for letter in string:
        if letter in left:
            stack.append(letter)
        elif letter in right:
            if len(stack) <= 0:
                return False
            if left.index(stack.pop()) != right.index(letter):
                return False
    return len(stack) == 0