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

HL·2022년 4월 22일
0

프로그래머스

목록 보기
38/44

문제링크

https://programmers.co.kr/learn/courses/30/lessons/76502#

문제설명

  • {}()[]로 이루어진 문자열 주어짐
  • x번 회전했을때 올바른 괄호가 되는 x의 개수
  • 0 <= x < 문자열 길이

풀이

  • s 최대 길이가 1000이라 완전 탐색했다
  • 1번씩 돌려가면서 올바른 괄호인지 검사
  • 열리면 append, 닫히면 pop
  • pop 했을 때 짝 맞으면 OK
  • 짝 맞지 않으면 False
  • 마지막에 stack이 비어있는지 검사해야함(s의 길이가 1일때 오답)

코드

from collections import deque


def solution(s):
    answer = 0

    s = deque(s)
    
    for _ in range(len(s)):
        if right(deque(s)):
            answer += 1
        s.rotate()
    
    return answer


def right(s):
    
    stack = []
    openSet = set(["{", "(", "["])
    closeSet = set(["}", ")", "]"])

    while s:
        curr = s.popleft()
        if curr in openSet:
            stack.append(curr)
        else:
            if not stack:
                return False
            prev = stack.pop()
            if prev == "{":
                if curr == "}":
                    pass
                else:
                    return False
            elif prev == "(":
                if curr == ")":
                    pass
                else:
                    return False
            elif prev == "[":
                if curr == "]":
                    pass
                else:
                    return False
            else:
                return False
    if stack:
        return False
    return True
profile
Frontend 개발자입니다.

0개의 댓글

관련 채용 정보