[LeetCode] 20. Valid Parentheses

ByWindow·2022년 5월 27일
0

Algorithm

목록 보기
101/104

📝문제

단순한 괄호 닫기 문제인데... Java로 풀다가 Python으로 풀려니까 규칙과 예외사항들을 생각하는 것이 어려웠다.

  • 열린 괄호는 반드시 같은 타입의 괄호로 닫혀야 된다
  • 열린 괄호는 반드시 마지막에 열린 것부터 닫혀야 한다
    • '([)]'는 false를 반환해야한다. '([])'가 True이다.

📌코드

class Solution:
    def isValid(self, s: str) -> bool:
        brackets = {'(': 1, ')': -1, '{': 2, '}': -2, '[': 3, ']': -3} #dict
        cur = [brackets[s[0]]]
        for i in range(1, len(s)):
            if brackets[s[i]] < 0:
                if len(cur) == 0:
                    return False
                if cur[len(cur)-1] * (-1) != brackets[s[i]]:
                    return False
                else:
                    cur = cur[:len(cur)-1]
            else:
                cur.append(brackets[s[i]])
        return True if len(cur) == 0 else False

문제를 풀 때는 stack을 생각하지 못했다.
그래서 코드가 많이 더럽다.
return문이 여러개 있는 것이 너무 마음에 안 든다💢
이 부분을 개선한 코드

class Solution:
    def isValid(self, s: str) -> bool:
        brackets = {
        '(' : ')',
        '[': ']', 
        '{': '}'
        }
        opposite = {'}', ']', ')'}
        stack = []
        for i in s:
            if i in brackets:
                stack.append(brackets[i])
            elif i in opposite:
                if not stack or stack.pop() != i:
                    return False

        return len(stack) == 0

이렇게 python의 list 함수 중 pop()을 사용하면 매우 깨끗하게 코드를 작성할 수 있다.

profile
step by step...my devlog

0개의 댓글