Programming/leetcode

20. Valid Parentheses

홍열 2021. 2. 16. 09:43
728x90

오늘부터는 stack, queue 파트를 풀어본다. 

 

문제 난이도는 쉬움

들어오는 문자열에서 기호의 쌍이 맞는지 확인하는 문제이다.

 

ex) {}[]() -> True

     ] -> False

     ][ -> False

여는 기호가 있고, 닫는 기호가 있는데, stack에는 항상 여는 기호를 넣어두고, 닫힌 기호를 만나면 

stack의 top과 비교해서 같으면 pop을 하고, 다르면 프로그램을 종료시키면 된다. 

 

오늘 배운점은 

not stack이면 empty stack을 의미한다. (빈배열)

c not in table에서 table은 key값들만 검사를 한다. (value는 values()라는 함수를 이용하면된다.)

python에서 삼항 연산자 사용은 다음과 같다

value if 조건 else value

예를 들어서 a가 3이면 True, 아니면 False는 다음과 같이 사용하면 된다.

True if a == 3 else False

        stack = []
        table = { ')':'(', '}':'{', ']':'['}
        for c in s:
            if c not in table:
                stack.append(c)
            else:
                if not stack:
                    return False
                if stack and stack.pop() != table[c]:
                    return False
                # 이 부분 줄여쓰면 다음과 같이 쓸수 있음
                # if not stack or stack.pop() != table[c]
                # return False
        # python에서 삼항 연산자 사용하는 방법 
        # return len(stack) == 0 을 해도 같다.
        return True if len(stack) == 0 else False