📖 월간 코드 챌린지 시즌2 > 괄호 회전하기

📖What I thought

  • 전형적인 스택 문제
  • 파이썬 dq에 rotate만알면 쉽게 풀 수 있는 문제
  • 사실 dq 몰라도 string으로도 쉽게 풀 수 있긴 했을 듯 str[1:] + str[:1] 이런식으로 반복문 돌면서 str 회전 시켰으면 될 듯?? → 그 방식으로도 풀었음!!

📖풀이

📎deque

from collections import deque
 
def solution(s):
    def check_str(dq):
        st = []
        for d in dq:
            if d == '(' or d == '[' or d == '{':
                st.append(d)
            elif st and (st[-1] == '(' and d == ')'):
                st.pop()
            elif st and (st[-1] == '[' and d == ']'):
                st.pop()
            elif st and (st[-1] == '{' and d == '}'):
                st.pop()
            else:
                return False
 
        return True if not st else False
    
    n = len(s)
    cnt = 0
 
    for i in range(n):
        dq = deque(s)
        dq.rotate(-i)
 
        flag = check_str(dq)
        
        if flag:
            cnt += 1
            
    return cnt

📎문자열

def solution(s):
    def check_str(bracket):
        st = []
        for b in bracket:
            if b == '(' or b == '[' or b == '{':
                st.append(b)
            elif st and (st[-1] == '(' and b == ')'):
                st.pop()
            elif st and (st[-1] == '[' and b == ']'):
                st.pop()
            elif st and (st[-1] == '{' and b == '}'):
                st.pop()
            else:
                return False
 
        return True if not st else False
    
    cnt = 0
    for i in range(len(s)):
        cnt += check_str(s[i:]+s[:i])
 
    return cnt

📖What I learned

  1. 파이썬의 bool타입은 int에서 파생된 클래스라서 연산 가능 → True 1 False 0으로 취급되어 계산됨

📖관련 지식

📎rotate(n)