유효한 괄호

제로콜라좋아요·2024년 5월 23일
0

algorithem

목록 보기
4/37

문제설명

다음과 같은 경우 입력 문자열이 유효합니다.

열린 괄호는 동일한 유형의 괄호로 닫혀야 합니다.
열린 괄호는 올바른 순서로 닫혀야 합니다.
모든 닫는 괄호에는 동일한 유형의 해당 열린 괄호가 있습니다.

예시 1:

입력: s = "()"
출력: true
예 2:

입력: s = "()[]{}"
출력: true
예시 3:

입력: s = "(]"
출력: false

제약:

1 <= s.length <= 104
s괄호로만 구성됩니다 '()[]{}'.

class Solution:
   def isValid(self, s: str) -> bool:
    stack = [] 
    bracket_map = {'(': ')', '{': '}', '[': ']'}  

    for char in s:
        if char in bracket_map:  
            stack.append(char) 
        elif stack and char == bracket_map[stack[-1]]:  
            stack.pop()
        else:  
            return False  

    return not stack 

<내 코드의 흐름>

  1. [] 괄호를 저장할 스택을 초기화합니다.
  2. {} 여는 괄호를 키로 하고, 그에 대응하는 닫히는 괄호를 값으로 하는 딕셔너리를 정의합니다.
  3. 문자열 s의 각 문자를 반복합니다.
  4. 현재 문자가 여는 괄호인지 확인합니다.
  5. 스택이 비어있지 않고, 현재 닫히는 괄호가 스택의 마지막 여는 괄호에 대응하는지 확인합니다.
  6. ()여는 괄호를 스택에 추가합니다.
  7. 대응하는 ()여는 괄호를 스택에서 제거합니다
  8. 현재 문자가 닫히는 괄호인데 대응하는 여는 괄호가 없거나, 순서가 맞지 않는 경우입니다.
  9. 유효하지 않은 문자열이므로 False를 반환합니다.
  10. 스택이 비어있으면 모든 괄호가 유효하게 닫혔으므로 True를 반환하고, 아니면 False를 반환합니다.
profile
개발자계의 제로콜라

0개의 댓글