[알고리즘] 이 괄호가 닫힌 괄호냐

짱구석·2020년 11월 13일
0
post-thumbnail

오늘의 문제


s는 여러 괄호들로 이루어진 String 인자입니다.

s가 유효한 표현인지 아닌지 true/false로 반환해주세요.

종류는 '(', ')', '[', ']', '{', '}' 으로 총 6개 있습니다. 아래의 경우 유효합니다.

  • 한 번 괄호를 시작했으면, 같은 괄호로 끝내야 한다.
  • 괄호 순서가 맞아야 한다.

예를 들어 아래와 같습니다.

s = "()"
return true
s = "()[]{}"
return true
s = "(]"
return false
s = "([)]"
return false
s = "{[]}"
return true

나의 풀이


def is_valid(string):
  stack = []
  check_list = {'{':'}', '[':']', '(':')'}

  for s in string:
    # 스택에 아무것도 없으면
    if not len(stack):
			# 여는 괄호가 나오면 스택에 추가
      if s in check_list.keys():        
				stack.append(s)
        continue
			# 닫는 괄호가 나오면 쌍을 이룰 수 없음. False 리턴
      else:
        return False

    # 여는 괄호가 나오면 스택에 추가
    if s in check_list.keys():
      stack.append(s)
    # 닫는 괄호가 나오면 이전 괄호가 자신의 쌍이 맞는지 확인 후 맞으면 삭제
		else:
      if check_list[arr[-1]] == s:
        arr.pop()
			# 쌍이 맞지 않으면 더이상 진행 불가. False 리턴
      else:
        return False
  
	# 전체 괄호를 돌고 더이상 남아있는 괄호가 없으면 모두 쌍이 맞음. True 리턴      
  if arr:
    return False
  else:
    return True

arr = '(()){}'

print(is_valid(arr))

0개의 댓글