[프로그래머스] 괄호 회전하기 (Python)

2022. 5. 13. 02:51알고리즘 & 자료구조

반응형

💁🏻 나의 풀이

from collections import deque

def is_correct(s):
    stack = deque()
    for c in s:
        stack.append(c)
        if len(stack) > 1:
            if stack[-2] + stack[-1] in ['[]', '{}', '()']:
                stack.pop()
                stack.pop()
    return len(stack) == 0

def solution(s):
    answer = 0
    s = deque(list(s))

    for i in range(len(s)):
        s.rotate(1)
        if is_correct(s):
            answer += 1

    return answer
from collections import deque

def is_correct(s):
    stack = deque()
    for c in s:
        if c in ['(', '{', '[']:
            stack.append(c)
        elif not stack or stack.pop() + c not in ['()', '{}', '[]']:
            return False
    return len(stack) == 0

def solution(s):
    answer = 0
    s = deque(list(s))

    for i in range(len(s)):
        s.rotate(1)
        if is_correct(s):
            answer += 1

    return answer
  • 괄호 문자열을 ‘회전’하기 때문에 deque.rotate 함수를 활용
  • 회전할 때마다 해당 괄호 문자열이 올바른지 체크한다 (스택 활용)

📚 What I Learned

스택으로 괄호를 체크할 때 더 효율적인 방법

  • 무조건 끝까지 검사해서 스택 비어있는 여부로 검사하는게 아니라
  • 여는 괄호면 stack.append , 닫는 괄호면 stack.pop 을 실행
  • 만약 pop에서 list가 비어있거나 알맞은 쌍이 아니라면 바로 올바름 여부를 판별할 수 있음
반응형