공대생의 비망록

[LeetCode][Easy] Valid Parentheses 문제 Python 풀이 본문

Programming Language/Python

[LeetCode][Easy] Valid Parentheses 문제 Python 풀이

myungsup1250 2026. 2. 10. 15:24

자료구조를 공부하게 되면 Stack의 특성을 활용하도록 꼭 한번은 경험하게 되는 문제를 LeetCode 플랫폼에서도 풀게 되었다.

기존에는 C나 C++, Java로 구현했었는데 이번에는 Python으로 여러 방법을 구현해보았다.

 

if-else 구문을 떡칠해서 문제를 해결하는 가장 기본적인 (멍청한) 방식:

class Solution:
    def isValid(self, s: str) -> bool:
        stack = list()
        for ch in s:
            if ch == '(' or ch == '{' or ch == '[':
                stack.append(ch)
            elif ch == ')':
                if len(stack) > 0 and stack[-1] == '(':
                    stack.pop()
                else:
                    return False
            elif ch == '}':
                if len(stack) > 0 and stack[-1] == '{':
                    stack.pop()
                else:
                    return False
            elif ch == ']':
                if len(stack) > 0 and stack[-1] == '[':
                    stack.pop()
                else:
                    return False
            # else: # ch is not '(', ')', '{', '}', '[', ']'
            #     continue
        if len(stack) == 0:
            return True
        return False

 

Dictionary 자료구조를 활용해서 괄호 유형 별로 쌍을 이루어 보다 간결한 로직으로 문제를 해결하는 방법:

class Solution:
    def isValid(self, s: str) -> bool:
        mydict = {')':'(', '}':'{', ']':'['}
        stack = list()
        for ch in s:
            if ch in mydict.values(): # '(', '{', '['
                stack.append(ch)
            elif ch in mydict.keys(): # ')', '}', ']'
                if len(stack) > 0 and stack[-1] == mydict[ch]:
                    stack.pop()
                else:
                    return False

        if len(stack) == 0:
            return True
        return False

 

Dictionary 자료구조 활용 방식을 보다 개선하고 코드를 보다 Pythonic하게 수정한 방법:

class Solution:
    def isValid(self, s: str) -> bool:
        mydict = {'(':')', '{':'}', '[':']'}
        stack = list()
        for ch in s:
            if ch in mydict.keys(): # '(', '{', '['
                stack.append(mydict[ch])
            elif ch in mydict.values(): # ')', '}', ']'
                if len(stack) > 0 and stack[-1] == ch:
                    stack.pop()
                else:
                    return False

        return len(stack) == 0
Comments