-
[stack] 20. Valid ParenthesesSW 정글/알고리즘 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:
- Open brackets must be closed by the same type of brackets.
- Open brackets must be closed in the correct order.
- 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