ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [stack] 20. Valid Parentheses
    SW 정글/알고리즘 2024. 10. 23. 16:46

    https://leetcode.com/problems/valid-parentheses/description/

     

    Given a string s containing just the characters '(', ')', '{', '}', '[' and ']', determine if the input string is valid.

    An input string is valid if:

    1. Open brackets must be closed by the same type of brackets.
    2. Open brackets must be closed in the correct order.
    3. Every close bracket has a corresponding open bracket of the same type.

     

    Example 1:

    Input: s = "()"

    Output: true

    Example 2:

    Input: s = "()[]{}"

    Output: true

    Example 3:

    Input: s = "(]"

    Output: false

    Example 4:

    Input: s = "([])"

    Output: true

     

    Constraints:

    • 1 <= s.length <= 104
    • s consists of parentheses only '()[]{}'.

    유효한 괄호로 이루어져있는지 판별하는 문제


    class Solution:
        def isValid(self, s: str) -> bool:
            stack = []
            bracket_map = {')': '(', '}': '{', ']':'['}
    
            for brkt in s:
                if brkt in bracket_map.values(): # 열린 괄호(value)
                    stack.append(brkt)
    
                elif brkt in bracket_map: #닫힌 괄호(key)
                # stack이 비어있거나
                #해당 닫힌 괄호를 key로 삼아 조회했을 때 기존 스택에 매칭되는 value(=열린괄호)가 없다면
                    if not stack or stack.pop() != bracket_map[brkt]: 
                        return False
            
            return not stack #모든 괄호가 정상적으로 닫히면 스택이 비워지므로
            # not stack이 맞으면 True, 아니면 False

     


     

    이렇게 짝을 지어서 dictionary로 저장해 두면 편하다니

      # 각 괄호의 짝을 딕셔너리로 표현
            bracket_map = {')': '(', '}': '{', ']': '['}

     

    닫힌 괄호를 key로, 열린 괄호를 value로 사용하는 방법이다.

    열린 괄호는 생길 때마다 push되고, 닫힌 괄호를 만날 때 pop을 하는데,

    pop을 하는 순간에 stack에 닫힌 괄호 key의 타입에 맞는 열린 괄호가 존재하지 않는 경우 False를 반환한다.

    elif char in bracket_map:
                    # 스택이 비어있거나 스택의 마지막 원소와 짝이 맞지 않는 경우
                    if not stack or stack.pop() != bracket_map[char]:
                        return False

     

     

    출력은 True, False로 받아야 하므로, not stack에 대해 맞다면 True, 스택이 비워지지 않아 not stack이 아니라면 False

    'SW 정글 > 알고리즘' 카테고리의 다른 글

    [Two Pointer] 392. Is Subsequence  (0) 2024.10.23
    [String] 14. Longest Common Prefix / startswith() 함수  (0) 2024.10.23
    [String] 412. Fizz Buzz  (0) 2024.10.23
    [math] 7. Reverse Integer  (0) 2024.10.23
    [math] 9. Palindrome-number  (0) 2024.10.23
Designed by Tistory.