20. Valid Parentheses

eunseo kim 👩‍💻·2021년 1월 29일
0

🎯 leetcode - 20. Valid Parentheses


🤔 나의 풀이

📌 문제

- 파이썬 알고리즘 인터뷰 20번 문제
- 괄호가 유효한지 판단하는 문제이다.

📌 날짜

2020.01.28

📌 시도 횟수

3 try

💡 Code

class Solution:
    def isValid(self, s: str) -> bool:
        pair = {")": "(", "}": "{", "]": "["}
        arr = []
        for char in s:
            if char in "({[":
                arr.append(char)

            if char in ")}]":
                if len(arr) == 0:
                    return False

                if pair[char] != arr.pop():
                    return False

        if len(arr) != 0:
            return False

        return True

💡 문제 해결 방법

- 여는 괄호이면 list에 넣는다.
- 닫는 괄호이면 list.pop()한 것과 현재 괄호가 같은 종류의 한 쌍이 되는지 판별한다.
- 만약 다르다면 False를 반환한다.
- 모든 문자열에 대한 검사를 끝냈을 때, list에 남아있는 괄호가 있으면 안된다. 
- 만약 남아있다면 False를 리턴한다.
- 모두 통과했다면 True를 리턴한다.

💡 새롭게 알게 된 점

- 미리 괄호 쌍을 dict로 만들어놓으면 편하다.
- dict를 검사할 때 dict[key]를 통해 value를 검사할 수 있음을 기억하자.

- 이 문제는 list를 stack처럼 사용하는 문제이다. 스택의 특징은 LIFO이다.

❌ (한번에 맞추지 못한 경우) 오답의 원인

- 

😉 다른 풀이

📌 하나. 내 풀이랑 비슷한데 좀 더 간결한 풀이

class Solution:
    def isValid(self, s: str) -> bool:
        pair = {")": "(", "}": "{", "]": "["}
        stack = []
        for char in s:
            if char not in pair:
                stack.append(char)
            elif not stack or pair[char] != stack.pop():
                return False
        return len(stack) == 0

💡 새롭게 알게 된 점

- 정말 깔끔한 풀이인 것 같다.
- 만들어놓은 pair dict를 조건문과 in을 활용하여 효율적으로 사용했다.
- return len(stack) == 0으로 코드를 최적화한게 너무 예쁘다😍

profile
열심히💨 (알고리즘 블로그)

0개의 댓글